1

多くの場合、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:

コメントにしか表示されないので...

4

2 に答える 2

3

クラスのsetDataReceiveHandler:withContext:メソッドのドキュメントには、次のように記載されています。GKSession

ハンドラーは、次のシグネチャを持つメソッドを実装する必要があります。

- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context;

これは、このメソッドが通常のデリゲート メソッドのように実装されていない理由についての質問には答えません。GKSessionこの実装では、接続を管理するデリゲート メソッドに応答するオブジェクトを 1 つ持つことができ、接続が確立されると着信データを処理する別のオブジェクトを指定できるため、柔軟性が向上すると思います。

いずれにせよ、このメソッドがどこで定義されているかという実際的な問題にこれが答えてくれることを願っています。

于 2012-10-19T17:37:11.430 に答える