应用程序因 - 未捕获的异常“NSGenericException”而终止,

Posted

技术标签:

【中文标题】应用程序因 - 未捕获的异常“NSGenericException”而终止,【英文标题】:App terminate due to - uncaught exception 'NSGenericException', 【发布时间】:2011-10-24 05:52:04 【问题描述】:

从服务器获取一些数据时出现以下错误。在获取数据时,我正在显示带有活动指示器的自定义警报视图。警报正在使用主线程,而数据获取由 NSThread 完成。此问题仅在某个时间发生,并非总是如此。我不明白该怎么做。

* 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“* 集合在被枚举时发生了变异。( "", "", “” )'

* 首次抛出时调用堆栈: (

0   CoreFoundation                      0x00f2abe9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x0107f5c2 objc_exception_throw + 47
2   CoreFoundation                      0x00f2a6a9 __NSFastEnumerationMutationHandler + 377
3   UIKit                               0x00371b8e -[UIView(Hierarchy) _findFirstSubviewWantingToBecomeFirstResponder] + 189
4   UIKit                               0x00366a13 -[UIView(Hierarchy) _promoteDescendantToFirstResponderIfNecessary] + 42
5   MyApplnName                        0x00015154 -[SecondViewController getDataFromServer] + 1798
6   Foundation                          0x000a1d4c -[NSThread main] + 81
7   Foundation                          0x000a1cd8 __NSThread__main__ + 1387
8   libSystem.B.dylib                   0x928db7fd _pthread_start + 345
9   libSystem.B.dylib                   0x928db682 thread_start + 34

)

在抛出 'NSException' 实例后调用终止

【问题讨论】:

我不是 Objective-C 专家,但是通过查看错误消息,我想问:在您的代码中,您是否在执行类似 foreach item in collection 的操作,同时修改了循环体? 【参考方案1】:

问题出在代码的一部分,您在其中枚举了一些 object,例如,NSMutableArrayNSMutableSet,使用 for-loop (for (id _obj in object)) 并在该循环中删除或添加一些对象到同样object。这是不可能的,并导致exception

您可以使用索引变量将 for-loop 替换为 for-loop:

 for (int i=0; i<[object count]; i++)
 
    //add or remove objects if you want
  

【讨论】:

不,我不会从 for 循环中删除任何对象。我实际上做的是,1. 我在 for 循环 2 中创建一个对象。如果它不是 Nil,则将其添加到一个字典中,然后将该对象添加到一个数组中。 你看我的帖子了吗? > 该循环删除或添加一些对象 抱歉以上帖子。我想通了,我改变了我的代码,它现在可以工作了。

以上是关于应用程序因 - 未捕获的异常“NSGenericException”而终止,的主要内容,如果未能解决你的问题,请参考以下文章

由于运行应用程序时未捕获的异常而终止应用程序

以 NSException Timer Swift Crash 类型的未捕获异常终止

启用“仅我的代码”时,Visual Studio 2015 JavaScript 调试不会捕获未处理的异常

WPF捕获全局未处理异常

Dart 单元测试应因异常而失败

Android视图:未捕获的处理程序:线程主因未捕获的异常而退出