Как удалить несохраненный объект из managedObjectContext - PullRequest
2 голосов
/ 14 февраля 2010

У меня проблема с проектом Core Data на iPhone. Сценарий происходит, когда пользователь начинает добавлять объект, а затем отменяет его во время процесса.

Если пользователь нажимает кнопку отмены и возвращается в список объектов, там указывается фиктивный объект, представляющий объект, который он находился в процессе создания. Это никогда не сохраняется в базе данных - сохранения происходят, как и ожидалось, когда пользователь нажимает кнопку сохранения.

Когда загружается контроллер представления, куда пользователь добавляет данные, я создаю новый объект Thing - это сущность Базовых данных, которую я добавляю:

myThing = [NSEntityDescription insertNewObjectForEntityForName: @ "myThing" inManagedObjectContext: managedObjectContext];

Я попытался удалить это в моем методе отмены следующим образом:

[managedObjectContext deleteObject: myThing];

Когда я делаю это, я получаю EXC_BAD_ACCESS, когда нажимаю кнопку отмены. Проходя по коду в отладчике, он нормально проходит через метод cancel, но он генерируется в контроллере корневого представления, где я перечисляю свои объекты, а также там, где я был до того, как пытался создать этот объект.

Все, чего я пытаюсь добиться, - это позволить пользователю добавить новый объект, но отменить его частично.

Есть идеи, что вызывает эту ошибку? Я не могу сгенерировать трассировку стека из этого, к сожалению: (

Ответы [ 2 ]

2 голосов
/ 14 февраля 2010

Ваш подход к отмене объекта типичен и уместен.

Ошибки памяти распространены и могут быть сложными для отладки. Вы запускаете статический анализатор? Возможно, вы захотите установить ссылку «myThing» на nil после удаления ее из контекста.

Вы точно знаете, что именно рабочий процесс отмены приводит к ошибке памяти?

0 голосов
/ 15 февраля 2010

Вы также можете включить NSZombie и узнать, к какому освобожденному объекту обращаются. Это поможет вам быстро отследить эту проблему. Google NSZombie для нескольких примеров того, как его использовать.

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