Базовые данные и 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