Базовые данные и NSFetchedResultsController: игнорирование полей в controllerDidChangeContent

У меня есть фоновый поток, который выполняет фоновые обновления, устанавливает / перезаписывает поля в нескольких видах NSManagedObjects. Все подклассы включают атрибут lastModified, который всегда обновляется при обработке фоновой задачей.

Моя проблема в том, что, когда я делаю это, все объекты, которые попадают в фоновый поток, также будут запускать controllerWillChangeContent / controllerDidChangeContent. Даже если ничего не изменилось.

  • Если я нажму на сеттер (например, с помощью строки NSString, но содержимое на самом деле не изменится, будет ли оно запускать обновление или достаточно ли умен CoreDate, чтобы игнорировать это?

  • Можно ли каким-то образом пометить атрибут, который не будет включен, при уведомлении об изменениях в resultsControllers?

1 ответ

Решение

Ты можешь использовать setPrimitiveValue:forKey: изменить NSManagedObject без отправки каких-либо уведомлений KVO (которые запускают обновление контроллера nsfetchedresults)

например

[self setPrimitiveValue:[NSDate date] forKey:@"lastModified"]

Вы можете прочитать больше об этом здесь https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html

Другие вопросы по тегам