![]() |
1
6
如果一个对象(SelectedEntity)已被释放并释放,则它不等于零。它是指向任意内存块的指针,并将其延迟(如果(selectedentity!)=nil)是编程错误(exc_bad_access)。 因此,常见的OBJ-C范式: [选择内容发布]; selectedEntity=零; |
![]() |
2
9
这与短路无关。Objective-C将消息吃到nil,因此检查
exc_bad_访问不是可捕获的异常。这是一个灾难性的失败,通常是由于尝试跟随无效的指针而导致的。 更可能的是,无论对象selectedEntity指向的对象在代码执行之前已被释放。因此,它既不是零,也不是有效的对象。 打开nszombies并重试。 如果您的应用程序是线程化的,您是否正确地在线程之间同步SelectedEntity(请记住,一般来说,不支持从辅助线程中篡改UI)? 您的文章已被编辑,以表明修复是:
这解决了这个问题,因为nsmutableArray将在删除时释放对象。如果保留计数为零,则对象将被解除分配,然后SelectedEntity将指向一个解除分配的对象。 |
![]() |
3
0
我刚读过这个 http://developer.apple.com/mac/library/qa/qa2004/qa1367.html 这表明您得到的错误是由于过度释放对象造成的。这意味着尽管selectedentity是nill,但您已经多次发布了它,而且它不再是您的了。 |
![]() |
4
0
在objc_exception_throw上放置一个断点,并查看它真正被抛出的位置。这条线不应该单独抛出一个exc-bad-u访问。 您是否在if块中做了可能导致异常的事情? |
![]() |
5
0
你这里有一个悬空的指针或僵尸。selectedEntity指向的是obj,它在引用selectedEntity之前就被释放。这使selectedEntity非nil,但它是一个无效对象,因此对它的任何取消引用都将崩溃。 你想重新发布obj而不是释放它。 |
![]() |
WkWk · Apple Watch动作通知不起作用 2 年前 |
![]() |
Otavio Miguel · 在手机中保留我自己未发布的ios应用 2 年前 |
![]() |
Nico Passaglia · 移动键盘向上移动站点 6 年前 |