Objective-c 方法调用将引用传递给调用者
Objective-c method call passing a reference to the caller
当使用 UITableView cellForRowAtIndexPath 方法时,调用该方法的表视图将传递给方法本身:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
如何创建利用相同技术的方法调用签名,以便将调用方传递给方法?是这样的:
签名:
- (void)questionDelegate:(HPSPickAWinnerQuestionDelegate *)questionDelegate questionDidChange:(NSInteger)questionElementTag
致电:
[self.pickAWinnerDelegate questionDidChange:2];
但这不起作用 - 正确的语法是什么?
非常感谢。
[self questionDelegate:pickAWinnerDelegate
questionDidChange:2];
您调用的方法将在 委托上调用,而不是将委托作为参数传递。这是一个简单的例子:
@protocol HPSPickAWinnerQuestionDelegate <NSObject>
- (void)asker:(YourQuestionAskingClass *)asker questionDidChange:(NSInteger)questionElementTag;
@end
@interface YourQuestionAskingClass : NSObject
@property (weak) id<HPSPickAWinnerQuestionDelegate> delegate;
@end
@implementation YourQuestionAskingClass
- (void)someMethod {
[self.delegate asker:self questionDidChange:2];
}
你的方法有 2 个 parameters.Maybe 你应该这样做:
[self questionDelegate:self.pickAWinnerDelegate questionDidChange:2];
当使用 UITableView cellForRowAtIndexPath 方法时,调用该方法的表视图将传递给方法本身:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
如何创建利用相同技术的方法调用签名,以便将调用方传递给方法?是这样的: 签名:
- (void)questionDelegate:(HPSPickAWinnerQuestionDelegate *)questionDelegate questionDidChange:(NSInteger)questionElementTag
致电:
[self.pickAWinnerDelegate questionDidChange:2];
但这不起作用 - 正确的语法是什么?
非常感谢。
[self questionDelegate:pickAWinnerDelegate
questionDidChange:2];
您调用的方法将在 委托上调用,而不是将委托作为参数传递。这是一个简单的例子:
@protocol HPSPickAWinnerQuestionDelegate <NSObject>
- (void)asker:(YourQuestionAskingClass *)asker questionDidChange:(NSInteger)questionElementTag;
@end
@interface YourQuestionAskingClass : NSObject
@property (weak) id<HPSPickAWinnerQuestionDelegate> delegate;
@end
@implementation YourQuestionAskingClass
- (void)someMethod {
[self.delegate asker:self questionDidChange:2];
}
你的方法有 2 个 parameters.Maybe 你应该这样做:
[self questionDelegate:self.pickAWinnerDelegate questionDidChange:2];