【问题标题】:App works in Simulator but not on Device - NSMutableArray应用程序可在模拟器中运行,但不能在设备上运行 - NSMutableArray
【发布时间】:2010-12-20 11:51:34
【问题描述】:

我的应用有问题,该应用在模拟器上运行良好,但在 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的其他帖子,它们与我的错误不太一样

【问题讨论】:

  • arrayValues中的数据来自哪里,模拟器和设备上的数据是一样的吗?

标签: iphone objective-c ios-simulator nsmutablearray


【解决方案1】:

嗯...我不确定您的问题是什么,但是有一个更好的方法可以做到这一点...

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

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

如果您需要更多帮助,您将不得不使用 NSLog arrayValues 并将输出提供给我们,以便我们可以看到您正在处理的内容。 :)

【讨论】:

    【解决方案2】:

    仅使用您提供的信息,无法查明问题(数据来自哪里?),但我们可以说异常提供了一个很大的线索:

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

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

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

    (另外,I agree with Thomas 关于你的实现。他的版本将更容易调试并且使用更少的内存。)

    【讨论】:

    • 谢谢你的回答,我用了Thomas的方法,比我的好,而且有效:)
    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多