EXC_BAD_ACCESS в UIApplicationMain - как интерпретировать этот обратный след? - PullRequest
3 голосов
/ 25 июня 2011
#0  0x0149609b in objc_msgSend ()
#1  0x06a75960 in ?? ()
#2  0x0108df9a in _performRunLoopAction ()
#3  0x0131189b in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
#4  0x012a66e7 in __CFRunLoopDoObservers ()
#5  0x0126f1d7 in __CFRunLoopRun ()
#6  0x0126e840 in CFRunLoopRunSpecific ()
#7  0x0126e761 in CFRunLoopRunInMode ()
#8  0x01c871c4 in GSEventRunModal ()
#9  0x01c87289 in GSEventRun ()
#10 0x00393c93 in UIApplicationMain ()
#11 0x00001f68 in main (argc=1, argv=0xbffff028) at /Users/Stu/Documents...

Меня немного смущает ?? () в верхней части. Увидев, что эта ошибка появилась в строке int retVal = UIApplicationMain(argc, argv, nil, nil);, я предположил, что проблема с доступом к памяти связана с пулом автоматического выпуска, но пока не нашел.

Ошибка возникает, когда я вызываю объект CoreData с определенным свойством для удаления. Этот процесс берет объект NSDate, находит основной объект данных с этой датой в качестве «отметки времени» и удаляет этот объект.

Я включил NSZombie вместе с NSDebug и MallocStackLogging, однако в журнале не отображается информация (кроме обратной трассировки, когда я запрашиваю ее, конечно). Шаги по коду также не помогают сузить проблему.

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

Проблема решена.

Как я изначально предполагал, это действительно было связано с пулом автоматического выпуска (всегда доверяйте своему инстинкту ...).По какой-то причудливой причине - возможно, после того, как я не спал в течение 36 часов - я автоматически выпустил объект, который не имел никакого дела с автоматическим выпуском.Это был простой пользовательский метод в стиле геттера, который возвращает выбранный текстовый объект.

Не уверен, почему NSZombie не был создан для него ...

2 голосов
/ 25 июня 2011

objc_msgSend (), вызывающий EXC_BAD_ACCESS, обычно означает, что функция не реализована в целевом объекте. Мы также можем видеть, что выполняется обратный вызов Observer. Рискну предположить, что вы где-то назвали -addObserver: selector: name: object: с неправильным селектором. (обычно печатается перед трассировкой стека).

...