Iphone NSOperation performSelectorOnMainThread崩溃

Iphone NSOperation performSelectorOnMainThread崩溃,iphone,crash,uinavigationcontroller,nsoperation,Iphone,Crash,Uinavigationcontroller,Nsoperation,我正在从NavigationController的子视图调用NSOperation MyOperation *op = [[MyOperation alloc] target:self action:@selector(didFinishOperation)]; 该操作从服务器加载一些数据,对其进行解析,然后发送 [target performSelectorOnMainThread:action withObject:nil waitUntilDone:YES]; 当工作完成时。这通常是有

我正在从NavigationController的子视图调用NSOperation

MyOperation *op = [[MyOperation alloc] target:self action:@selector(didFinishOperation)];
该操作从服务器加载一些数据,对其进行解析,然后发送

[target performSelectorOnMainThread:action withObject:nil waitUntilDone:YES];
当工作完成时。这通常是有效的

问题是,当我在NSOperation执行其工作时按下导航控制器上的后退按钮时,应用程序崩溃,因为该操作引用了一个解除分配的实例

我试着保留这个操作,但它仍然崩溃


提前感谢

在您的UIView解除锁定方法中,您可以取消该操作并将其从NSOperationQueue中删除。

在您的UIView解除锁定方法中,您可以取消该操作并将其从NSOperationQueue中删除。

克里斯走上了正确的道路,但是它不包括当您尝试取消操作时操作完成的情况,并且它仍然会崩溃。如果操作在
main
中执行,则取消将不生效

尽管如此,请在目标被销毁之前尝试取消它,但在尝试向其发送消息之前,请测试
目标是否仍然存在。此外,在尝试发送邮件之前,请检查您是否已被取消:

if ( self.isCancelled ) return;

Chris在正确的轨道上,但它不包括当您尝试取消操作时操作完成的情况,并且它仍然会崩溃。如果操作在
main
中执行,则取消将不生效

尽管如此,请在目标被销毁之前尝试取消它,但在尝试向其发送消息之前,请测试
目标是否仍然存在。此外,在尝试发送邮件之前,请检查您是否已被取消:

if ( self.isCancelled ) return;

我已经取消了ViewWillEnglish中的操作:[operationQueue cancelAllOperations];加载视图时,我运行了多个操作。如上所述,这将取消操作,但如果在main中执行,则不会取消操作。我尝试过:if(target)[target performSelectorOnMainThread:action with object:nil waitUntilDone:YES];但是错误仍然发生…我刚刚检查了代码,我的操作在尝试通知目标之前检查它们是否已取消。感谢ohhorob,这完成了任务:)我已经取消了ViewWill中的操作:[operationQueue cancelAllOperations];加载视图时,我运行了多个操作。如上所述,这将取消操作,但如果在main中执行,则不会取消操作。我尝试过:if(target)[target performSelectorOnMainThread:action with object:nil waitUntilDone:YES];但是错误仍然发生……我刚刚检查了代码,我的操作在尝试通知目标之前检查它们是否被取消。谢谢Ohorob,完成了任务:)