2015-02-07 5 views
0

создать класс NSObject работать с MultipeerConnectivity, и для этого я использую этот код ниже:DismissViewController внутри NSObject класса

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 распознавание, когда мы нажимаем кнопку Отменить существующий в пределах браузера класс VC, почему этот метод не вызывается?

Теперь, если я выложу эти коды в классе myViewController.m, этот метод вернется к работе, но он делает код очень грязным.

ответ

0

Вы действительно назвали функцию DeviceConnect :: browserViewControllerWasCancelled?

Вы должны прикрепить кнопку «Отменить прикосновение к внутреннему событию» к некоторой функции, а затем вызвать функцию отклонения vc.

Возможно, следующий код вам поможет.

MyViewController.m (Предположим, что у вас есть присоединять кнопка отмены этой функции)

-(IBAction)clickCancel:(id)sender 
{ 
    [self.navigationController popViewControllerAnimated:NO]; 
} 
0

Я считаю, что этот вопрос является делегатом MCBrowserViewController выпускается. Вы создаете локальную переменную, а затем показываете прикрепленный к ней MCBrowserViewController. Локальная переменная освобождается, потому что никто не ссылается на нее, даже если вы показываете MCBrowserViewController.

Вместо

DeviceConnect *devices = [[DeviceConnect alloc] initConnectionWithDisplayName:[UIDevice currentDevice].name]; 

Сделать устройства свойства или переменный экземпляр. Затем он не должен быть выпущен, и делегат MCBrowserViewController будет работать правильно.

Надеюсь, что исправлена ​​проблема.