崩溃:UINavigationController和线程的后退按钮

时间:2015-12-08 10:44:45

标签: ios objective-c multithreading asynchronous

我有一个线程(异步操作),它从服务器下载一些数据,当下载结束时,该线程调用一个方法。但是,如果用户在下载结束前按下导航控制器的后退按钮,则会收到EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)致命错误。

我尝试了很多东西,但我无法处理这次崩溃。

如果用户在异步操作结束前按下导航控制器的后退按钮,我该如何处理错误?

我使用Objective-C和Dropbox API,我使用的方法是

values1 = [1.346112,1.337432,1.246655]
values2 = [1.033836,1.082015,1.117323]
metrics.mutual_info_score(values1,values2)

当我按下后退按钮时,我会在僵尸对象和Profile Inspector的帮助下获取信息。多亏了他们,我可以看到崩溃前的最后一次通话:

loadThumbnail:ofSize:intoPath of the class DBRestClient.

但是这个调用是在被解雇的视图控制器中释放所有对象之后完成的。

1 个答案:

答案 0 :(得分:0)

您必须在dealloc中取消正在运行的请求。 DBRequestcancel方法,DBRestClientcancelAllRequests方法。

同时将所有相关代表设为nil。

connectionDidFinishLoading:是协议NSURLConnectionDataDelegate的一种方法。这是在一个对象上调用的,它不再存在,因此崩溃。