Поиск ошибки с использованием Xcode - попытка вставить значение nil

Я получаю случайную ошибку в моем приложении, которая вызывает его сбой. Проблема, с которой я сталкиваюсь, заключается в том, что XCode не сообщает мне, где происходит сбой, только из приведенной ниже информации. Может кто-нибудь сказать мне, как я могу узнать, где я могу найти проблему в коде? Это должно произойти сбой в тот же момент, что и при падении приложения, это всегда показывает ниже.

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: 0)' * First throw call stack: (0x381e48bf 0x37d301e5 0x381e47b9 0x381e47db 0x381516bb 0x9237b 0x91121 0x8f0c5 0x8abc1 0x37b9d 0x8b68f 0x3550850f 0x381b0577 0x3813c0cf 0x3547c3fb 0x3547dc2b 0x8d005 0x3814322b 0x34495 0x32e31 0x3372d 0x30a59 0x3813e435 0x7b1df 0x7b88d 0x79e25 0x31ca650f 0x31ca5f01 0x31c8c4ed 0x31c8bd2d 0x37f12df3 0x381b8553 0x381b84f5 0x381b7343 0x3813a4dd 0x3813a3a5 0x37f11fcd 0x31cba743 0x89e8b 0x24a4) terminate called throwing an exception(lldb)

 ThomasW31 мая 2012 г., 11:27
Похоже, у вас выключены символы. Возможно, вы строите для релиза, а не для разработки?
 superGokuN31 мая 2012 г., 11:24
ошибка говорит о том, что вы пытаетесь установить значение nil в своем словаре
 superGokuN31 мая 2012 г., 11:25
Чтобы найти ошибку, вы можете добавить точку останова или eSable NSZombie или добавить точку останова исполнения

Ответы на вопрос(5)

Ваша проблема в том, что вы используете метод setObject: forKey для NSDictionary, просто сделайте его NSMutableDictionary, а затем попробуйте этот метод, вы не можете присвоить значение для NSDictionary, как вы пытаетесь использовать его только для NSMutableDictionary.

Я надеюсь, вы поймете мою точку зрения, что я пытаюсь сказать.

Решение Вопроса

Вы включилиexception breakpoints? Нажмите на+ в левом нижнем углу Навигатора точек останова, затем выберитеAdd Exception Breakpont.

enter image description here

Вы можете щелкнуть правой кнопкой мыши точку останова, чтобы изменить ее & # x2026;

enter image description here

Это приведет к остановке кода в точке, где происходит ошибка.

 Peter01 июн. 2012 г., 10:41
Спасибо @Ashley, это мне очень помогло.

Есть решение, которое я обычно использую в своих проектах, устанавливая некоторые специальные точки останова. Для этого:

Open XCode Goes to "View -> Navigators -> Show Breakpoint Navigators"

Теперь добавьте несколько новых точек останова, нажав кнопку & quot; + & quot; кнопка:

Add exception breakpoint Add Symbolic breakpoint with symbol [NSException raise] Add Symbolic breakpoint with symbol objc_exception_throw

Запустите ваш проект снова, приложение остановится на линии, которая вызывает ваши проблемы.

 08 июн. 2012 г., 00:04
Почему это не включено по умолчанию !?
 08 июн. 2012 г., 10:03
Хороший вопрос :-)

Ошибка достаточно очевидна. в любой вашей строке, где вы устанавливаете какой-то объект для словаря, ваш ключ равен nill, что недопустимо

Попробуй это:

if([myDictionary objectForKey:@"string"]!= nil && [myDictionary objectForKey:@"string"]!= Nil) { }

Ваш ответ на вопрос