iphone – 在iOS上“因未捕获的异常而终止应用程序”

iphone – 在iOS上“因未捕获的异常而终止应用程序”,第1张

概述我的代码中有一个for循环. 当for循环的执行继续时,我的应用程序崩溃并在控制台上打印以下消息: Terminating app due to uncaught exception 'NSRangeException', reason: '-[NSMutableArray objectAtIndex:] index 2 beyond bounds [0 .. 1]' Call stack at 我的代码中有一个for循环.
当for循环的执行继续时,我的应用程序崩溃并在控制台上打印以下消息:

Terminating app due to uncaught exception 'NSRangeException',reason: '-[NSMutableArray objectAtIndex:] index 2 beyond bounds [0 .. 1]'  Call stack at first throw:

使用这个for循环我试图填充一个NSMutableArray,但这不是正在做的.

解决方法 通常,当您尝试访问NSArray边界之外的索引处的元素时会发生这种情况.

所以说你有一个像这样的NSArray:

NSArray *a = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];

此代码将打印“数组索引超出范围”,因为边界为0 – 2:

@try {   Nsstring *string = [a objectAtIndex:3];} @catch(NSRangeException *e) {   NSLog(@"Array index out of bounds");}

解决此问题的最佳方法是使用快速枚举:

for(ID obj in array) {   //do something with obj}

快速枚举使用可枚举对象的NSFastEnumeration协议实现来处理所有脏工作.

即使在使用快速枚举时通常会导致此问题的一件事是,如果您枚举可变结构(例如NSMutableArray)并且在循环体内部,则使用removeObject:或其变体来改变结构,您将遇到此问题因为结构的长度被缓存,因此即使它超出了界限,它也将继续进行下一次迭代.

但是,使用快速枚举,您将很快捕获此错误,因为内部__NSFastEnumerationMutationHandler将捕获它并引发以下异常

2011-02-11 00:30:49.825 MutableNSFastEnumerationTest[10547:a0f] *** Terminating app due to uncaught exception 'NSGenericException',reason: '*** Collection <NSCFArray: 0x10010c960> was mutated while being enumerated.<CFArray 0x10010c960 [0x7fff70c45ee0]>{type = mutable-small,count = 2,values = (    0 : <CFString 0x100001078 [0x7fff70c45ee0]>{contents = "b"}    1 : <CFString 0x100001058 [0x7fff70c45ee0]>{contents = "c"})}'*** Call stack at first throw:(    0   CoreFoundation                      0x00007fff8621e7b4 __exceptionPreprocess + 180    1   libobjc.A.dylib                     0x00007fff80daa0f3 objc_exception_throw + 45    2   CoreFoundation                      0x00007fff862765bf __NSFastEnumerationMutationHandler + 303    3   MutableNSFastEnumerationTest        0x0000000100000de7 main + 295    4   MutableNSFastEnumerationTest        0x0000000100000cb8 start + 52    5   ???                                 0x0000000000000001 0x0 + 1)terminate called after throwing an instance of 'NSException'
总结

以上是内存溢出为你收集整理的iphone – 在iOS上“因未捕获的异常而终止应用程序”全部内容,希望文章能够帮你解决iphone – 在iOS上“因未捕获的异常而终止应用程序”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1035118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存