NSManagedObject изменил свойства после сохранения - PullRequest
8 голосов
/ 18 ноября 2011

Можно ли узнать, какие свойства были сохранены на управляемом объекте после того, как сохранение произошло? Например, у меня есть кто-то, кто слушает сохранения контекста управляемого объекта (NSManagedObjectContextDidSaveNotification), и я хочу знать, какие свойства объектов были сохранены.

Ответы [ 3 ]

8 голосов
/ 18 ноября 2011

NSManagedObjectContextDidSaveNotification содержит все три бита информации, которые вам необходимо синхронизировать с сервером. Отметьте [notification userInfo], и вы найдете три набора внутри: NSInsertedObjectsKey, NSUpdatedObjectsKey и NSDeletedObjectsKey

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

Обновление № 2

При дальнейшем ковырении:

Начиная с NSManagedObjectContextWillSaveNotification вы можете просматривать каждый набор и обращаться к методу changedValues. Вы можете хранить ссылку на этот словарь до тех пор, пока не получите NSManagedObjectContextDidSaveNotification, а затем обработать изменения. Все еще звучит очень тяжело для меня.

Обновление

Какова ваша конечная цель?!?!

Если вы пытаетесь выяснить, что нужно отправить на сервер, значит, уровень атрибута слишком низок. Вы должны синхронизироваться на уровне объекта.

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

1 голос
/ 21 ноября 2011

Вот решение, с которым я согласился.У меня есть один одноэлементный класс, который уведомляется, когда контекст сохраняется.Уведомление NSManagedObjectContextWillSave сообщает мне, что изменилось, поэтому я сохраняю их в словаре с ключом, который является сохраненным контекстом.Затем, когда я получаю уведомление NSManagedObjectContextDidSave, я проверяю словарь на связанный контекст.Наконец, я удаляю эту запись из словаря.Это кажется разумным?

1 голос
/ 18 ноября 2011

Почему бы вам не получить их, когда они собираются быть спасенными. Подпишитесь на NSManagedObjectContextWillSaveNotification и отметьте insertedObjects, updatedObjects и deletedObjects из NSManagedObjectContext.

Обновление:

Еще проще, получить информацию о пользователях NSManagedObjectContextDidSaveNotification

Из документации:

Как правило, в потоке A вы регистрируетесь для контекста управляемого объекта сохранить уведомление, NSManagedObjectContextDidSaveNotification. Когда ты получить уведомление, его словарь информации пользователя содержит массивы с управляемыми объектами, которые были вставлены, удалены и обновлены на нить Б.

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/coredata/Articles/cdConcurrency.html#//apple_ref/doc/uid/TP40003385-SW1

...