我正在从NavigationController的Subview调用NSOperation。
MyOperation *op = [[MyOperation alloc] target:self action:@selector(didFinishOperation)];
操作从服务器加载一些数据,解析它然后发送
[target performSelectorOnMainThread:action withObject:nil waitUntilDone:YES];
工作完成后。这通常有效......
问题是当NSOperation正在执行其工作时从导航控制器按下后退按钮时,应用程序崩溃,因为该操作引用了已释放的实例。
我试过保留这个操作 - 但它仍然崩溃......
提前致谢
答案 0 :(得分:4)
克里斯走在正确的轨道上,但它没有涵盖操作完成的情况,因为你试图取消它,它仍然会崩溃。如果操作在main
中执行,则取消将不会生效。
仍然,在目标被销毁之前尝试取消它,但在尝试发送消息之前测试target
是否仍然存在。此外,在尝试发送邮件之前,请检查您是否已取消:
if ( self.isCancelled ) return;
答案 1 :(得分:0)
在你的UIView dealloc方法中,你可以取消操作并将其从NSOperationQueue中删除。