应用工作在模拟器,但不是设备 - NSMutableArray的
我有一个问题,我的应用程序,这在模拟器上运行良好,但是当我启动我的iDevice我得到了一个错误:应用工作在模拟器,但不是设备 - NSMutableArray的
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)的对象。
在模拟器中没有问题,数组不是空容器。 我不知道在哪里寻找。
我还检查了计算器的其他职位,他们是不是真的喜欢我的错误
嗯......我不知道你的问题是什么,但有一个更好的方法来做到这一点..
for(NSString *theString in arrayValues){
NSNumber *aNumber = [NSNumber numberWithFloat:[theString floatValue]];
[arrayValues2 addObject:aNumber];
}
这可能会有所帮助,因为您不会超出任何数组边界或插入任何零对象。
如果你想获得更多的帮助,你需要NSLog arrayValues并给我们输出,这样我们就可以看到你在处理什么。 :)
谢谢你正在使用我的iPhone! – ciwol 2010-12-20 12:52:43
与你所提供的信息只是工作,这是不可能的,以查明问题(这里是哪里来的数据?),但我们可以说的是,除了给出了一个大线索:
您不能将nil
值插入到数组中(如果您确实需要,请使用NSNull
)。
为什么会有nil
值?那么,当你尝试将你的字符串转换成数字时,它会发现它无法识别的东西。当发生这种情况时,它返回一个nil
。
因此,您需要清理数据(确保所有内容都是的数字),或者在循环中放置错误处理,以便它不会尝试将无效值放入数组中。
(另外,I agree with Thomas关于您的实现。他的版本会更容易调试和使用较少的内存。)
谢谢你的回答,我用托马斯的方法,它比我的好,它的工作原理:) – ciwol 2010-12-20 12:55:56
哪里是在arrayValues来自的数据是数据上的模拟器和设备一样吗? – 2010-12-20 11:56:30