【发布时间】:2016-01-22 01:16:10
【问题描述】:
我使用 NSURLConnection 下载文件,当用户点击返回时,我不一定知道连接是否已完成并已正确处理。所以我添加了以下检查,如果连接不为空,请取消它。
if (self.urlConnection){
[self.urlConnection cancel];
}
这在 iOS 7/8 中有效,我从未收到过异常。但是现在在 iOS 9 中,当我检查连接是否存在(并且不存在)时,我得到了一个异常。这是上面的第一行,在我实际调用 url 之前。
我不明白为什么检查一个对象是否为 nil 会引发异常,如果确实如此 - 我怎么能期望防止这个异常。
在我调用它之前,是否有一种新方法可以确保对象存在并且尚未被释放?
编辑:这是属性的声明方式:
@property (nonatomic, assign) NSURLConnection *urlConnection;
如果对象实际上还没有被实例化,检查工作正常。只有当连接完成并变为 nil 时,然后我尝试检查检查是否为 nil 才会爆炸。这在早期的 iOS 版本上没有发生。
【问题讨论】:
-
(1)
urlConnection属性是如何声明的? (2) 你确定self存在吗? (3) 你确定这发生在主线程上吗? -
什么异常/错误?请完整的错误文本。
-
完整的错误是上面的EXC。 Xcode 不会发出其他消息,也不会显示其他任何消息。
-
我在上面添加了声明。我确信 self 存在,它稍后在方法中使用并且不会失败。这是在按下按钮后发生的(并且在按下按钮后建立了连接)。唯一的多线程代码是连接,所以我没有做任何线程。
-
尝试在此语句之前访问 self 的任何其他变量以检查 self 是否存在
标签: ios objective-c xcode ios9 exc-bad-access