Cor*_*nie 11 ios7 multipeer-connectivity
我在使用iOs7中的Multipeer Connectivity Framework保持连接时遇到了麻烦.目前,我的应用程序使用MCNearbyServiceAdvertiser和MCNearbyServiceBrowser以编程方式处理浏览和广告.我有一个警报视图,询问用户他是浏览器还是广告商.在从该视图返回时,我相应地实例化MCNearbyServiceAdvertiser或Browser.
#pragma - Alert Delegate
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
_browser = [[MCNearbyServiceBrowser alloc]initWithPeer:_peerID serviceType:@"Context-xl"];
[_browser setDelegate:self];
[self.detailViewController setRemote:YES];
[_browser startBrowsingForPeers];
} else
{
_advertiser = [[MCNearbyServiceAdvertiser alloc]initWithPeer:_peerID discoveryInfo:nil serviceType:@"Context-xl"];
[_advertiser setDelegate:self];
[self.detailViewController setRemote:NO];
[_advertiser startAdvertisingPeer];
}
[self.detailViewController configureView];
}
Run Code Online (Sandbox Code Playgroud)
我的会话委托方法peer:... DidChangeState ...被调用两次,一次用于连接,另一次用于断开连接.会话开始后,我根本不会停止广告客户或浏览器.我应该停止浏览/广告吗?
编辑使用Apple的支持票,他们确认调用带有太多数据的sendData或者经常会导致断开连接.
编辑我的假设是Apple有一个线程或队列轮询以检查对等体是否已连接.如果此线程/队列停止(即命中断点或应用程序挂起CPU或在主线程上执行某些操作),则会导致断开连接.
创建没有加密的会话似乎有助于提高性能和断开连接,尽管它们仍然存在.
MCPeerID* peerId = [[MCPeerID alloc] initWithDisplayName:self.displayName];
self.peer = [[MultiPeerPeer alloc] initWithDisplayName:peerId.displayName andPeer:peerId];
self.session = [[MCSession alloc] initWithPeer:peerId securityIdentity:nil encryptionPreference:MCEncryptionNone];
Run Code Online (Sandbox Code Playgroud)
另外,我发现调用sendData太频繁(每秒超过30-60次)可能导致框架处于错误状态并导致冻结和断开连接.
| 归档时间: |
|
| 查看次数: |
3158 次 |
| 最近记录: |