在iOS Game Kit中,是receiveata:fromPeer:inSession:委托协议的上下文部分?

时间:2012-09-08 20:27:55

标签: iphone objective-c ios delegates gamekit

通常,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:

所以它只出现在评论中......

2 个答案:

答案 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都已更新,所有协议都是明确的,所有回调都是打字的 - 我猜他们错过了这个。