Как прочитать вывод консоли Xcode? - PullRequest
2 голосов
/ 11 мая 2011

Как разработчик Java и PHP, новичок в Xcode, у меня возникают проблемы с ошибками памяти.У меня есть пример программы из книги, которая при запуске вылетает с сообщением «Программа получила сигнал« SIGABRT »».Я не знаю, что делать с выводом консоли ниже.Я понимаю, что это какая-то трассировка стека, но имя слева - это просто имя приложения, а не класс или файл.Я не знаю, что означает «основной + 121» или «старт + 53» или где искать.Любое руководство будет оценено.

2011-05-11 10:43:23.071 FlowerInfoNavigator[22537:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFDictionary objectForKey:]: method sent to an uninitialized mutable dictionary object'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00dc25a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x00f16313 objc_exception_throw + 44
    2   CoreFoundation                      0x00dbf542 -[__NSPlaceholderDictionary objectForKey:] + 194
    3   FlowerInfoNavigator                 0x0000289a -[RootViewController tableView:didSelectRowAtIndexPath:] + 330
    4   UIKit                               0x0008bb68 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140
    5   UIKit                               0x00081b05 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 219
    6   Foundation                          0x0079b79e __NSFireDelayedPerform + 441
    7   CoreFoundation                      0x00da38c3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
    8   CoreFoundation                      0x00da4e74 __CFRunLoopDoTimer + 1220
    9   CoreFoundation                      0x00d012c9 __CFRunLoopRun + 1817
    10  CoreFoundation                      0x00d00840 CFRunLoopRunSpecific + 208
    11  CoreFoundation                      0x00d00761 CFRunLoopRunInMode + 97
    12  GraphicsServices                    0x00ffa1c4 GSEventRunModal + 217
    13  GraphicsServices                    0x00ffa289 GSEventRun + 115
    14  UIKit                               0x00022c93 UIApplicationMain + 1160
    15  FlowerInfoNavigator                 0x00001b99 main + 121
    16  FlowerInfoNavigator                 0x00001b15 start + 53
)
terminate called after throwing an instance of 'NSException'
(gdb)

Ответы [ 3 ]

4 голосов
/ 11 мая 2011

Справа находятся вызванные методы, которые находятся в стеке.Обычно я просто ищу что-нибудь из одного из моих методов (хотя это не всегда работает), и тогда он даст вам вызов метода, из которого возникла проблема.в трассировке при вызове № 3 на «FlowerInfoNavigator» был вызван метод tableView:didSelectRowAtIndexPath: и где-то есть причина сбоя.Вы должны быть в состоянии использовать отладчик и точки останова, чтобы сужать его оттуда, мы надеемся.Удачи.

Редактировать: как я посмотрел на ваше сообщение об ошибке: в верхней части он дает вам ошибку.Вы пытались извлечь объект из NSDictionary, который еще не был инициализирован, и сверху это произошло в вашем didSelectRowAtIndexPath методе

0 голосов
/ 11 мая 2011

Сбой из-за того, что nsdictionary еще не инициализирован и как искать во время сбоя, сначала посмотрите на консоль, чтобы вы получили представление о том, что вызвало сбой или исключение, и чтобы узнать, где произошло сбой приложения, вы можете проверить отладчик. . В отладчике строка особенно выделена жирным шрифтом в месте сбоя приложения.

Кроме того, вы также можете использовать NSZombieEnabled (BOOL), чтобы получить причину сбоя приложения. Подробнее о NSZombieEnabled можно узнать здесь http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/130-Debugging_Applications/debugging_applications.html

Примечание: здесь обязательно установите для NSZombieEnabled значение NO во время обработки приложения для отправки в Apple Store.

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

0 голосов
/ 11 мая 2011

Консоль была бы не единственным местом, куда вы смотрите. Взгляните на свой отладчик тоже. Там обычно есть одна линия, которая выделена жирным шрифтом. Если вы нажмете на это, он покажет вам, где именно произошла авария.

Похоже, вы не инициировали NSDictionary

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