gpt4 book ai didi

ios - "popViewControllerAnimated"方法调用第二个方法后

转载 作者:行者123 更新时间:2023-11-29 03:26:28 26 4
gpt4 key购买 nike

我有导航 Controller 。在此 Controller 的第二个 View 上,我创建了一个后退按钮,其操作名为“后退”。在这个方法中,我调用“popViewControllerAnimated”方法,问题是,在“popViewControllerAnimated”之后,我还有一些其他操作也同时调用,但是在“popViewControllerAnimated”之后并且它们显示为我,但我需要阻止它。

当我按下按钮时:

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

以及用于解析服务器结果的委托(delegate):

- (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. 应用发送到服务器事件“退出”
  3. popViewControllerAnimated
  4. 应用收到服务器的应答并显示结果


但是,如果我关闭该 View Controller ,列表中的第 4 项在“popViewControllerAnimated”之后如何工作?我该如何解决此问题?

最佳答案

你能把通信逻辑放在一个中心类中吗(可能是单例)?那有责任与后端通信。当它收到答案时,它会发送通知。一些类应该收到通知并添加一个新的 View Controller 。

类似于我在此线程中建议的内容: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];

}
}

收听通知的好地方是当前 View Controller 之前的 View Controller 。

关于ios - "popViewControllerAnimated"方法调用第二个方法后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20402280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com