[__NSArrayM insertObject: atIndex:]: объект не может быть nil - как определить, где ошибка?

У меня большой проект с асинхронным событием, и иногда у меня ошибка [__ NSArrayM insertObject: atIndex:]: объект не может быть nil, но я не знаю, где это ошибка. Как я могу поймать эту ошибку? Я утверждаю, что везде, где я делаю операцию insertobject: atIndex и ничего..

Это стек:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***    -[__NSArrayM insertObject:atIndex:]: object cannot be nil'


*** First throw call stack:

(0x34c352a3 0x32f4597f 0x34b7f8d9 0xc48db 0xc3ced 0xc3b41 0x1178d9 0x148aed 0x103cfd    0x102fc9 0x101f95 0x35f25595 0x35f7a13b 0x35f7a081 0x35f79f65 0x35f79e89 0x35f795c9 0x35f794b1 0x35f67b93 0x35f67833 0xd820b 0x35fc8275 0x3604aea9 0x326efa6f 0x34c0a5df 0x34c0a291 0x34c08f01 0x34b7bebd 0x34b7bd49 0x350b82eb 0x35f5a301 0x62e45 0x62de0)

libc++abi.dylib: terminate called throwing an exception

Ответ 1

Хороший способ проверить, где находится ваш код:

1) перейдите на вкладку точки останова в Xcode.

2) нажмите кнопку "+" внизу.

3) Добавить точку останова исключений

a) На вкладке break выберите оба параметра:

  i) on Throw 

  ii) on Catch 

и построить и r ип.

4) Эти контрольные точки дадут вам именно то, где ваше приложение разбивается в 90% случаев.

Надеюсь, вам это поможет.:)

Ответ 2

Иногда, если вы не можете найти исключение, где его бросает. Просто попробуйте добавить эти symbolic breakpoints в свой проект. Затем запустите

 objc_exception_throw 
 malloc_error_break
 [NSException raise]

В Xcode перейти Product -> Debug -> Create Symbolic Breakpoint. Введите каждую точку останова, указанную выше, в Symbol, затем нажмите Done, или вы также можете создать, перейдя в Breakpoint navigator (cmd + 6) в левом нижнем углу, вы можете найти символ +, нажмите +, затем Add symbolic breakpoint. Теперь попробуйте запустить, это приведет вас к конкретной строке, где он сбой.

Ответ 3

Думаю, вам нужно обработать нулевое значение из массива. Его работа для меня что-то вроде:

if ( array ! = nil ) {
    NSLog(@"name is nil");
} else {
    // addobject to array 
}

Ответ 4

По-видимому, объект, который вы вставили, не должен быть nil. Проверьте это!