iOS Crash之NSGenericException

问题

1. foreach操作

NSGenericException这个异常最容易出现在foreach操作中,在for in循环中如果修改所遍历的数组,无论你是add或remove,都会出错,比如

uncaught exception 'NSGenericException',reason:'*** Collection <__NSCFDictionary:0x7071100> was mutated while being enumerated.

意思是在枚举时,集合数据被修改了。

原因就在这 "foreach",它的内部遍历使用了类似 Iterator进行迭代遍历,一旦元素变动,之前的元素全部被失效,所以在foreach的循环当中,最好不要去进行元素的修改动作,若需要修改,循环改为for遍历,由于内部机制不同,不会产生修改后结果失效的问题。

2. 读取数据文件失败

uncaught exception'NSGenericException',reason:Could not open database file at /var/mobile/media/iTunes_Control/iTunes/MediaLibrary.sqlitedb

3. 其他

 uncaught exception'NSGenericException',reason:UIPopoverPresentationController () should have a non-nilsourceView or barButtonItem set before the presentation occurs.

解决方法

1. 对于第一种情况,集合数据遍历元素时,若需要修改原元素,不要使用foreach,而使用for循环。

2. 对于第二种情况,检查数据库文件的有效性,包括是否存在。

3. 对于第三种情况,也是检查参数的有效性

你可能感兴趣的:(iOS Crash之NSGenericException)