gpt4 book ai didi

iphone - iOS 上的 "Terminating app due to uncaught exception"

转载 作者:可可西里 更新时间:2023-11-01 05:02:08 26 4
gpt4 key购买 nike

我的代码中有一个 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];

此代码将打印“Array index out of bounds”,因为边界是 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 协议(protocol)实现来为您处理所有脏活。

即使在使用快速枚举时通常也会导致此问题的一件事是,如果您正在枚举一个可变结构,例如 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 上的 "Terminating app due to uncaught exception",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4965827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com