当应用程序从后台返回到前台时,MCSession 无法重新连接
Posted
技术标签:
【中文标题】当应用程序从后台返回到前台时,MCSession 无法重新连接【英文标题】:MCSession ofen can't reconnect when app return to foreground from background 【发布时间】:2014-04-06 07:50:52 【问题描述】:我正在使用 Mutipeer Connectivity 制作聊天应用程序。起初,一切运行良好,MCSession 可以相互连接。但是当用户点击主页按钮然后点击应用程序图标时,应用程序会相互断开连接并且通常无法重新连接。但有时它可以重新连接。成功是随机的。
- (void)viewDidLoad
[super viewDidLoad];
...
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(DidBecomeActive:)
name: UIApplicationDidBecomeActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didEnterBackground:)
name: UIApplicationDidEnterBackgroundNotification object:nil];
NSString *displayname=[[NSUUID UUID] UUIDString];
_MyPeerID=[[MCPeerID alloc] initWithDisplayName:displayname];
- (void)DidBecomeActive:(NSNotification *)notification
if (notFirstLaunch==YES)
NSLog(@"DidBecomeActive");
NSString *displayname=[[NSUUID UUID] UUIDString];
_MyPeerID=[[MCPeerID alloc] initWithDisplayName:displayname];
[self createSession];
[self createAdvertiser];
[self beginBrowsing];
notFirstLaunch=YES;
- (void)didEnterBackground:(NSNotification *)notification
NSLog(@"didEnterBackground");
[_MySession disconnect];
_MySession=nil;
_MyBrowser=nil;
_MyAdver=nil;
- (void)createSession
_MySession=[[MCSession alloc] initWithPeer:_MyPeerID];
_MySession.delegate=self;
- (void)createAdvertiser
_MyAdver=[[MCNearbyServiceAdvertiser alloc] initWithPeer:_MyPeerID discoveryInfo:nil serviceType:MyServiceType];
_MyAdver.delegate=self;
[_MyAdver startAdvertisingPeer];
- (void)beginBrowsing
_MyBrowser=[[MCNearbyServiceBrowser alloc] initWithPeer:_MyPeerID serviceType:MyServiceType];
_MyBrowser.delegate=self;
[_MyBrowser startBrowsingForPeers];
【问题讨论】:
你找到解决办法了吗? 【参考方案1】:从您发布的代码来看,没有任何东西重新连接,因为在 didEnterBackground 中您断开了会话并破坏了会话、浏览器和广告商。在 DidBecomeActive 中,您有一个守卫 (notFirstLaunch),这意味着会话和广告商仅在您第一次激活时创建,而不是在您从后台返回时创建。
【讨论】:
以上是关于当应用程序从后台返回到前台时,MCSession 无法重新连接的主要内容,如果未能解决你的问题,请参考以下文章