我创建了一个NSOBject类来使用MultipeerConnectivity,为此我使用下面的代码:
DeviceConnect.m
-(id)initConnectionWithDisplayName:(NSString*)value{
myPeerID = [[MCPeerID alloc] initWithDisplayName:value];
mySession = [[MCSession alloc] initWithPeer:self.myPeerID];
mySession.delegate = self;
browserVC = [[MCBrowserViewController alloc] initWithServiceType:@"chat" session:self.mySession];
browserVC.delegate = self;
browserVC.minimumNumberOfPeers = 1;
browserVC.maximumNumberOfPeers = 1;
advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:@"chat" discoveryInfo:nil session:mySession];
[advertiser start];
return self;
}
-(MCBrowserViewController*)pushConnectView{
return browserVC;
}
- (void)browserViewControllerWasCancelled:(MCBrowserViewController *)browserViewController{
NSLog(@"dismiss the screen");
[browserVC dismissViewControllerAnimated:YES completion:nil];
}
MyViewController.m
DeviceConnect *devices = [[DeviceConnect alloc] initConnectionWithDisplayName:[UIDevice currentDevice].name];
[self.navigationController presentViewController:[devices pushConnectView] animated:YES completion:nil];
除了委托方法 browserViewControllerWasCancelled ,当我们点击browserVC类中存在的取消按钮时,为什么不调用此方法,此代码可以正常工作?
现在,如果我在类myViewController.m中抛出这些代码,这个方法又恢复了工作,但它使得代码非常混乱。
答案 0 :(得分:0)
您是否真的调用了函数DeviceConnect :: browserViewControllerWasCancelled?
你应该将Button Cancel touch-up-inside事件附加到某个功能,然后调用dismiss vc功能。
也许以下代码可以帮助您。
MyViewController.m(假设您已将取消按钮附加到此功能)
-(IBAction)clickCancel:(id)sender
{
[self.navigationController popViewControllerAnimated:NO];
}
答案 1 :(得分:0)
我认为问题是MCBrowserViewController的委托正在发布。您只是创建一个局部变量,然后显示附加到它的MCBrowserViewController。本地变量被释放,因为即使您正在显示MCBrowserViewController,也没有人对它有强引用。
而不是
DeviceConnect *devices = [[DeviceConnect alloc] initConnectionWithDisplayName:[UIDevice currentDevice].name];
使设备成为属性或实例变量。然后它不应该被释放,MCBrowserViewController委托将正常工作。
我希望能解决您的问题。