NSManagedObjectContextDidSaveNotification вызывается для временных изменений свойств? - PullRequest
2 голосов
/ 09 сентября 2011

Кажется, я не могу получить четкий ответ на этот вопрос: когда вы изменяете временное свойство, а затем вызываете save, должен ли запускаться NSManagedObjectContextDidSaveNotification?В моем приемнике уведомлений, как я могу отфильтровать эти уведомления, которые приходят от изменений в переходных свойствах?

Вот что я пытаюсь сделать: я хочу загрузить список контактов в главном потоке,и когда это будет сделано, я хочу прочитать изображения в фоновом потоке из адресной книги и прикрепить их к контактам.На первый взгляд, это прекрасно работает: после загрузки из сущности «Контакты» я использую очередь отправки, чтобы перебрать все контакты, найти их изображение в адресной книге и сохранить их в свойстве Contact «mageImage »(которое временно).,Затем очередь отправки успешно перезагружает представление таблицы (в главном потоке), и изображения отображаются рядом с контактами.Проблема заключается в том, что если я что-то делаю с контактом, который вызывает «сохранение» даже на ОДНОМ из управляемых объектов (например, при удалении одного из контактов), NSManagedObjectContextDidSaveNotification вызывается для ВСЕХ контактов.Я обнаружил, что это потому, что свойство contactImage было изменено до ... комментируя, что "self.contactImage = img;"линия заставляет проблему уйти.Это удивляет меня, поскольку я подумал, что уведомление о сохранении будет вызываться только для непереходных свойств.

Может кто-нибудь подтвердить, является ли это ожидаемым поведением?Или я что-то не так делаю?Если ожидается, как вы отфильтровываете обновления переходных свойств в слушателе NSManagedObjectContextDidSaveNotification?Мне нужно выполнить некоторую постобработку в слушателе, и я не хочу делать это без необходимости для временных изменений свойств.Я проверил словарь changeValues ​​в NSManagedObject, но в слушателе он кажется пустым (так как, я полагаю, изменились только временные свойства).

Спасибо.

1 Ответ

0 голосов
/ 10 сентября 2011

Вчера,

Переходные свойства имеют одну ключевую характеристику - они управляются. Вы можете легко добавить ivars, которые не управляются ни к какому NSManagedObject. Если вы это сделаете, на них не распространяются уведомления -save:

Смежный вопрос: почему вы используете временный ивар? У них есть специализированное использование; прежде всего они используются для запуска обновлений свойств по всей модели; то есть поведение, которое вы видите.

Второй связанный с этим вопрос: почему вы загружаете все изображения в фоновом режиме, а не лениво загружаете их из адресной книги? Для меня это выглядит как случай преждевременной оптимизации.

Andrew

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