NSManagedObject подкласс горе - PullRequest
1 голос
/ 19 декабря 2010

Эй, ребята, у меня есть подкласс NSManagedObject.В awakeFromInsert и awakeFromFetch я вызываю метод инициализации, который, помимо прочего, запускает NSTimer.

Теперь мне нужно место, чтобы сделать недействительным таймер.Однако dealloc, finalize, didTurnIntoFault, prepareForDeletion и willTurnIntoFault не вызываются.

Согласно документации, все эти методы должны вызываться при удалении объекта из памяти.Ни один из них, однако все данные сохраняются в постоянном хранилище.Я озадачен, почему или как.

Могу ли я что-нибудь сделать, чтобы эти методы не вызывались в течение жизненного цикла объектов?

1 Ответ

0 голосов
/ 20 декабря 2010

Основные данные управляют временем жизни NSManagedObject с. Он не собирается стирать объект из памяти сам по себе, если вы не попросите об этом. Глядя на документацию , можно найти два пути:

  1. отправка refresh:mergeChanges: в MOC приводит к превращению объекта в ошибку.
  2. отправка reset в MOC приводит к его самовосстановлению, как если бы он был только что создан.

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

На самом деле, ваша проблема, вероятно, указывает на проблему с дизайном. NSTimer - это, по сути, событие пользовательского интерфейса. Вероятно, он должен контролироваться вашим контроллером MVC, который отправляет сообщение объекту модели (NSManagedObject) для выполнения действия.

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