我的应用程序有问题,在模拟器上运行良好但是当我在iDevice上启动时出现错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'
0 CoreFoundation 0x3513cfd3 __exceptionPreprocess + 114
1 libobjc.A.dylib 0x303928a5 objc_exception_throw + 24
2 CoreFoundation 0x350bff99 -[__NSArrayM insertObject:atIndex:] + 472
3 CoreFoundation 0x350bfda7 -[__NSArrayM addObject:] + 34
....
Program received signal: “SIGABRT”.
在调试器中,我可以看到问题出在哪里。错误来自于addObject:
for (int i = 0; i < [arrayValues count]; i++) {
f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
myNumber =[f numberFromString:[arrayValues objectAtIndex:i]];
[arrayValues2 addObject:myNumber];
[f release]; }
这里我在arrayValues2中的NSNumbers中转换arrayValues(NSString)的对象。
在模拟器中没有问题,阵列不是空的。 我不知道在哪里寻找。
我还检查了stackoverflow的其他帖子,它们并不像我的错误
答案 0 :(得分:2)
for(NSString *theString in arrayValues){
NSNumber *aNumber = [NSNumber numberWithFloat:[theString floatValue]];
[arrayValues2 addObject:aNumber];
}
这可能有所帮助,因为你不会超越任何数组边界,也不会插入任何nil对象。
如果您需要更多帮助,您将需要NSLog arrayValues并提供输出,以便我们可以看到您正在处理的内容。 :)
答案 1 :(得分:1)
只是处理你提供的信息,就不可能查明问题(数据来自哪里?),但我们可以说这个例外提供了一个很大的线索:
您无法将nil
值插入数组(如果确实需要,请使用NSNull
)。
为什么有nil
值?好吧,当你尝试将你的字符串转换为数字时,它会发现它无法识别的东西。当发生这种情况时,它会返回nil
。
因此,您需要清理数据(以确保所有 一个数字)或在循环中放置错误处理,以便它不会尝试将无效值放入数组中。
(另外,I agree with Thomas关于你的实现。他的版本将更容易调试并使用更少的内存。)