Bluetooth通信をテストするアプリを試してみました。ある iDevice から別の iDevice にテキスト形式でメッセージを送信するだけのシンプルなアプリです。当初、このアプリには約 6 つの警告がありましたが、2 つを除いてすべて修正しました。それらは同じですが、異なるデリゲートを扱います。1 つは GKPeerPickerControllerDelegate 用で、もう 1 つは GKSessionDelegate 用です。次のように入力すると、 Picker エラーが picker という名前の GKPeerPickerController に対するものであるとします (より完全な例を次に示します)。
picker.delegate = self;
コンパイラは次のように述べています。
'*const___strong' を互換性のない型 'id' のパラメーターに渡します。
GKSession の名前付きセッションの場合、次のように入力します。
session.delegate = self;
コンパイラに次のように言わせます。
'*const___strong' を互換性のない型 'id' のパラメーターに送信しています。
これらは、送信するボタンと peerPickerController のみに表示されます。これらの警告がアプリの機能を妨げないことはわかっていますが、これを Xcode 4.2 用に完全に更新したいと考えています。このアプリは、もともと iOS 3.0 が新しくなったときに Xcode 用に作成されました。はい、コードを書いたり練習したりすることに関しては、私は少しうるさいです。可能な限り、エラーや警告を含めてはなりません。
これらは、警告が発生するコード ブロックです。
-(IBAction)btnConnect:(id)sender{
picker = [[GKPeerPickerController alloc] init];
picker.delegate = self; //Warning here
picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
[connect setHidden:YES];
[disconnect setHidden:NO];
[picker show];
}
-(void)peerPickerController:(GKPeerPickerController *)PCpicker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session{
self.currentSession = session;
session.delegate = self; //Warning here
[session setDataReceiveHandler:self withContext:nil];
PCpicker.delegate = nil;
[PCpicker dismiss];
}
編集:
ヘッダーにはこれがあります:
@interface BTViewController : UIViewController{
GKSession *currentSession;
IBOutlet UITextField *txtMessage;
IBOutlet UIButton *connect;
IBOutlet UIButton *disconnect;
GKPeerPickerController *picker;
}