2013-12-05 4 views
0

У меня есть контроллер навигации. Во втором представлении этого контроллера я создал кнопку «Назад», действие которой называется «назад». В этом методе я называю метод popViewControllerAnimated, и проблема заключается в том, что после «popViewControllerAnimated» у меня есть другое действие, которое также вызывается в одно и то же время, но после «popViewControllerAnimated», и они показывают мне, но мне нужно чтобы заблокировать его.После вызова метода popViewControllerAnimated второй метод

Когда я нажать кнопку:

- (void)back { 
    [socketIO sendEvent:@"exit" withData:nil]; // Send data to server 
    [self.navigationController popViewControllerAnimated:NO]; 
} 

И делегат для разбора результата от сервера:

- (void)socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet { 
    if ([packet.name isEqualToString:@"disconnect"]) { 
     NSLog(@"Exit"); // This code also works, but it works after "popViewControllerAnimated", but I want to block it. 
    } 
} 


Схема:

  1. Пользователь нажимает назад
  2. App отправки на сервер событий «выход»
  3. popViewControllerAnimated
  4. App получил ответ от сервера и показать результат


Но как пункт 4 в списке работ после того, как «popViewControllerAnimated», если я закрою что View Controller? Как я могу исправить это поведение?

ответ

1

Можете ли вы поместить логику связи в центральный класс (возможно, одноэлементный)? Это несет ответственность за общение с бэкэнд. Когда он получает ответ, он отправляет уведомление. Некоторый класс должен получить уведомление и добавить новый контроллер представления.

Что-то вроде того, что я предложил в этой теме: Dismissing view in UINavigationController and at the same time syncing

--- Редактировать ответить на комментарий --- Прежде всего, я думаю, что это важно, чтобы имя класса ниже более связное к проблема, которую вы пытаетесь решить. Я дал ему общее имя, но меня не устраивает имя, которое я выбираю.

@interface Communicator : NSObject 

- (void) sendExit; 

+ (Communication *) defaultCommunicator; 

@end 

В .c

- (void)socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet { 
    if ([packet.name isEqualToString:@"disconnect"]) { 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"CommunicatorExit" object:boek]; 

    } 
} 

Хорошее место для прослушивания уведомления будет контроллер вид перед текущим.

+0

Я использую singleton, но я использую его для подключения к серверу, но работать с контроллером view из singleton неудобно. Или вы можете показать пример, как это можно сделать четко? – user2058653

Смежные вопросы