在NSObject类中的DismissViewController

时间:2015-02-07 14:25:39

标签: objective-c nsobject dismiss multipeer-connectivity

我创建了一个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中抛出这些代码,这个方法又恢复了工作,但它使得代码非常混乱。

2 个答案:

答案 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委托将正常工作。

我希望能解决您的问题。