Приложение работает в симуляторе, но не на устройстве - NSMutableArray - PullRequest
0 голосов
/ 20 декабря 2010

У меня проблема с моим приложением, которое хорошо работает на симуляторе, но при запуске на 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];    }

Здесь я конвертирую объекты arrayValues ​​(NSString) в NSNumbers в arrayValues2.

В симуляторе проблем нет, массивы не пустые. Я не знаю, где искать.

Я также проверил другие сообщения stackoverflow, они не очень похожи на мою ошибку

Ответы [ 2 ]

2 голосов
/ 20 декабря 2010

хорошо ... Я не уверен, в чем ваша проблема, но есть гораздо лучший способ сделать это ...

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

, который может помочь, потому что вы не будете превосходить любогограницы массива или вставка любых nil-объектов.

Если вам нужна дополнительная помощь, вам нужно обратиться к NSLog arrayValues ​​и дать нам вывод, чтобы мы могли видеть, с чем вы имеете дело.:)

1 голос
/ 20 декабря 2010

Просто работая с предоставленной вами информацией, невозможно точно определить проблему (откуда поступают данные?), Но мы можем сказать, что исключение дает большую подсказку:

Вы не можете вставить nil значения в массив (используйте NSNull, если вам действительно нужно).

Почему существует значение nil?Что ж, когда вы пытаетесь преобразовать вашу строку в число, она находит что-то, что не распознает.Когда это происходит, возвращается nil.

Так что вам нужно либо санировать ваши данные (чтобы убедиться, что все является числом), либо включить обработку ошибок в ваш цикл, чтобы онане пытается помещать недопустимые значения в массив.

(Также Я согласен с Томасом относительно вашей реализации. Его версия будет легче отлаживать и использовать меньше памяти.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...