Ios “之后”;popViewControllerAnimated“;方法调用第二个方法

Ios “之后”;popViewControllerAnimated“;方法调用第二个方法,ios,uinavigationcontroller,Ios,Uinavigationcontroller,我有导航控制器。在这个控制器的第二个视图中,我创建了一个后退按钮,该按钮的动作名为“后退”。在这个方法中,我调用了“popViewControllerAnimated”方法,问题是,在“popViewControllerAnimated”之后,我还有一些其他的动作,这些动作也在同一时间被调用,但是在“popViewControllerAnimated”之后,它们会显示给我,但我需要阻止它 当我按下按钮时: - (void)back { [socketIO sendEvent:@"exi

我有导航控制器。在这个控制器的第二个视图中,我创建了一个后退按钮,该按钮的动作名为“后退”。在这个方法中,我调用了“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.
    }
}

方案

  • 用户返回
  • 应用程序发送到服务器事件“退出”
  • popViewControllerAnimated
  • 应用程序从服务器收到答案并显示结果


  • 但是如果我关闭了视图控制器,列表中的第4项在“popViewControllerAnimated”之后是如何工作的呢?如何修复此行为?

    能否将通信逻辑放在中心类(可能是单例)中?负责与后端进行通信。当它收到答复时,它会发送一个通知。某些类应该接收通知并添加新的视图控制器

    类似于我在这篇帖子中的建议:

    ---编辑以回应评论--- 首先,我认为下面的类的名称与您试图解决的问题更相关是很重要的。我给它起了一个通用的名字,但我对我选择的名字不满意

    @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];
    
        }
    }
    

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

    我使用singleton,但我使用它连接服务器,但使用singleton的视图控制器并不舒服。或者你可以举一个例子来说明如何做到这一点?