我有一个后台线程,可以执行后台更新,设置/覆盖几种NSManagedObjects上的字段。所有子类都包含一个lastModified属性,该属性在由后台任务处理时始终会更新。

我的问题是,当我这样做时,所有被后台线程击中的实体也会触发controllerWillChangeContent / controllerDidChangeContent。即使什么都没有真正改变。

  • 如果我碰到了一个setter(例如,使用NSString,但内容实际上并未更改,它是否仍会触发更新,或者CoreDate是否足够聪明,可以忽略此问题?)
  • 在通知resultsControllers更改时,是否可以以某种方式标记不包含的属性?
  • 最佳答案

    您可以使用setPrimitiveValue:forKey:更改NSManagedObject而不发送任何KVO通知(这会触发nsfetchedresultscontroller更新)

    例如

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

    您可以在这里阅读更多有关这些的信息
    https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html#//apple_ref/doc/uid/TP40002154-SW5

    10-08 05:56