一个解决方案是将异步调用移动到它自己的类,最好由View2Controller
或更高级别的人拥有。当推View3Controller
时,你只需传递这个新类,如果用户导航回来,它会继续按照你的想法。推View3Controller
View3Controller *view3Controller = ...
view3Controller.asyncObject = self.asyncObject;
[self.navigationController pushView....];
,并从内部View3Controller
self.asyncObject.delegate = self;
[self.asyncObject start];
开始异步操作时,当
AsyncObject : NSObject {}
@property (nonatomic, assign) id delegate;
- (void)start;
,如果用户返回您可以:
想像这样一个对象可能会做这样的事情在navigationController:willShowViewController:animated:
的View2Controller
确实从asyncObject
得到回调,如果View3Controller
被弹出。
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (viewController == self) {
self.asyncObject.delegate = self;
}
}
如果您需要能够在同一时间,你应该看看通知或志愿接收来自asyncObject
事件的几个对象(密钥值观察),而不是使用一个代表。
如果应用程序用户不希望网络操作完成,这是由用户指示离开视图 - 为什么你要它完成?当我回到那个观点时,你不能启动另一个连接吗? – 2010-11-26 10:23:39