通常,Xcode中的自动完成功能会自动填充该类的方法名称,如果类中包含其他对象的类,则为方法名称:
@interface ViewController : UIViewController <UIAlertViewDelegate,
GKPeerPickerControllerDelegate>
但是对于Game Kit的方法,要在ViewController.m
:
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer
inSession: (GKSession *)session context:(void *)context {
// ...
}
它似乎不是任何委托方法的一部分,无论是通过Xcode的自动完成还是在任何文档中?如果它不是委托的一部分,为什么它与所有其他委托方法的工作方式不同?
更新:如果我搜索所有标头文件:
grep -r receiveData /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
包含该行的唯一文件是:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/GameKit.framework/Headers/GKSession.h:- (void)setDataReceiveHandler:(id)handler withContext:(void *)context; // SEL = -receiveData:fromPeer:inSession:context:
所以它只出现在评论中......
答案 0 :(得分:3)
setDataReceiveHandler:withContext:
课程中GKSession
方法的文档说明:
处理程序必须实现具有以下签名的方法:
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context;
这不能解答为什么此方法不像普通委托方法那样实现的问题。我想这个实现提供了更大的灵活性,因为你可以让一个对象响应管理连接的GKSession
委托方法,同时在建立连接后指定一个不同的对象来处理传入的数据。
无论如何,希望这能解决这个方法定义的实际问题,这让我有一段时间不知所措。
答案 1 :(得分:0)
我怀疑它是不同的,因为API来自Objective C的早期版本(最初,协议的强类型较少,而且大多数回调方法都是以这种特殊的,非编译器检查的方式定义的)。 p>
大多数(几乎所有)核心API都已更新,所有协议都是明确的,所有回调都是打字的 - 我猜他们错过了这个。