Сбой приложения основных данных, "EXC_BAD_ACCESS" и NSZombie - PullRequest
1 голос
/ 20 мая 2011

В настоящее время я работаю над приложением, которое сильно зависит от Core Data. я используйте навигационный контроллер, чтобы перемещать и перемещать изображения. Когда я иду обратно в стек в контроллере навигации программа иногда вылетает, и я получаю сообщение об ошибке (обычно выделяется на managedObjectContext синтезирует или освобождает):

"Thread 1: Program received signal: "EXC_BAD_ACCESS".

Я использовал статический анализатор, чтобы исправить все обнаруженные утечки.

Я использовал NSZombie, и кажется, что мои ассигнования увеличиваются, а затем не снижаются, когда я отключаю представления меню. Затем, когда я нажимаю на другое представление меню, я получаю два результата.

0 Category:NSManagedObjectContext EventType:Malloc RefCt:1 Timestamp:00:04.133.722 Address:0x5da0f10 Size:128 RespLib:pua-app RespCaller:-[pua_appAppDelegate managedObjectContext]

1 Category:NSManagedObjectContext EventType:Zombie RefCt:-1 Timestamp:00:16.524.983 Address:0x5da0f10 Size:0 RespLib:pua-app RespCaller:-[OpenersroutinesMenuViewController setManagedObjectContext]

У меня есть опыт ZERO с отладкой этого типа, но, очевидно, контекст управляемого объекта «несчастлив», и я предполагаю, что я неправильно создаю или управляю контекстом, так как он передается через меню. Это также интересно, потому что MOC не изменяется в этих меню, и в представлениях, где он изменен, эта ошибка не возникает.

1 Ответ

1 голос
/ 20 мая 2011

Во-первых, утечки никогда не приведут к такой аварии.Утечка - недостаточный выброс.Эти сбои, как правило, вызваны чрезмерным выпуском.

Из вашего вывода NSZombie похоже, что ваш MOC - это переизбыток.Я бы посмотрел в каждом месте, где вы обрабатываете managedObjectContext, и удостоверился, что вы правильно его сохранили и освободили.Первое правило - использовать средства доступа, а не связываться с вашими иварами напрямую (за исключением случаев -init, -dealloc и ваших средств доступа, которые должны использовать ивары).

Возможная причина такого рода проблеммногопоточность.Убедитесь, что вы не обращаетесь к одному и тому же MOC из нескольких потоков.Они не поточнобезопасны.

Проблема, вероятно, не имеет ничего общего с представлениями или меню.Скорее всего, проблема в том, что вы звоните -release на MOC, который вы не сохранили.

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