“popViewControllerAnimated”方法调用第二个方法后

时间:2013-12-05 14:14:04

标签: ios uinavigationcontroller

我有导航控制器。在这个控制器的第二个视图中,我创建了一个名为“back”的后退按钮。在这个方法中我调用“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. 应用程序发送到服务器事件“exit”
  3. popViewControllerAnimated
  4. 应用程序从服务器收到答案并显示结果

  5. 但是,如果我关闭了View Controller,那么列表中的项目4如何在“popViewControllerAnimated”之后工作?我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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];

    }
}

收听通知的好地方是当前视图之前的视图控制器。