Tom*_*ton 9 delegates objective-c ios multipeer-connectivity
我第一次使用mutlipeer连接框架,我想要编程(不是助手类)控制.
当我在两个单独的设备上运行我的代码时,一切都正常工作,直到'广告客户'收到委托回调为止:
浏览客户端的委托回调在发现广告商时被调用:
-(void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info{
[[[UIAlertView alloc] initWithTitle:@"Peer Found" message:peerID.displayName delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
_session = [[MCSession alloc] initWithPeer:_myPeerID];
_session.delegate = self;
//connect to the discovered peer.
[_browser invitePeer:peerID toSession:_session withContext:nil timeout:30.0];
[_browser stopBrowsingForPeers];
Run Code Online (Sandbox Code Playgroud)
}
然后在收到邀请时调用广告客户端的委托回调:
-(void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void (^)(BOOL, MCSession *))invitationHandler{
//when my code runs, everything looks correct here.
//eg. peerID is definitely my 'browser' client's display name etc.
_session = [[MCSession alloc] initWithPeer:_myPeerID];
_session.delegate = self;
//using a simple version for testing... accept all invites.
invitationHandler(YES, _session);
//stop advertising now.
[_advertiser stopAdvertisingPeer];
}
Run Code Online (Sandbox Code Playgroud)
在调用'invitationHandler(YES,_session)'之后,似乎在'浏览'客户端和'广告'客户端之间从未建立连接.
我在任一客户端设备上的MCSession对象上都没有收到任何委托回调(我收到一次或两次MCSessionStateNotConnected).我原本以为我会收到MCSession委托回调:
-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state;
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?还有其他人遇到过这个问题吗?
Fra*_*isi 10
苹果显然有一个错误.
这就是导致发现的原因:为什么我的MCSession对等体会随机断开连接?
您必须实现以下委托回调,即使它在文档中列为可选...
- (void) session:(MCSession *)session didReceiveCertificate:(NSArray *)certificate fromPeer:(MCPeerID *)peerID certificateHandler:(void (^)(BOOL accept))certificateHandler
{
certificateHandler(YES);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3119 次 |
| 最近记录: |