2010-12-20 133 views
0

我有一个问题,我的应用程序,这在模拟器上运行良好,但是当我启动我的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)的对象。

在模拟器中没有问题,数组不是空容器。 我不知道在哪里寻找。

我还检查了计算器的其他职位,他们是不是真的喜欢我的错误

+0

哪里是在arrayValues来自的数据是数据上的模拟器和设备一样吗? – 2010-12-20 11:56:30

回答

2

嗯......我不知道你的问题是什么,但有一个更好的方法来做到这一点..

for(NSString *theString in arrayValues){ 
    NSNumber *aNumber = [NSNumber numberWithFloat:[theString floatValue]]; 
    [arrayValues2 addObject:aNumber]; 
} 

这可能会有所帮助,因为您不会超出任何数组边界或插入任何零对象。

如果你想获得更多的帮助,你需要NSLog arrayValues并给我们输出,这样我们就可以看到你在处理什么。 :)

+0

谢谢你正在使用我的iPhone! – ciwol 2010-12-20 12:52:43

1

与你所提供的信息只是工作,这是不可能的,以查明问题(这里是哪里来的数据?),但我们可以说的是,除了给出了一个大线索:

您不能将nil值插入到数组中(如果您确实需要,请使用NSNull)。

为什么会有nil值?那么,当你尝试将你的字符串转换成数字时,它会发现它无法识别的东西。当发生这种情况时,它返回一个nil

因此,您需要清理数据(确保所有内容都是的数字),或者在循环中放置错误处理,以便它不会尝试将无效值放入数组中。

(另外,I agree with Thomas关于您的实现。他的版本会更容易调试和使用较少的内存。)

+0

谢谢你的回答,我用托马斯的方法,它比我的好,它的工作原理:) – ciwol 2010-12-20 12:55:56

相关问题