2014-09-25 104 views
2

我有一個後臺線程執行後臺更新,設置/覆蓋幾種NSManagedObjects上的字段。所有子類都包含一個lastModified屬性,它在被後臺任務處理時總是得到更新。核心數據和NSFetchedResultsController:忽略控制器中的字段DidChangeContent

我的問題是,當我這樣做時,所有被後臺線程擊中的實體也會觸發controllerWillChangeContent/controllerDidChangeContent。即使沒有真正改變。

  • 如果我打了一個二傳(例如使用一個NSString但內容並沒有真正改變,將它仍然觸發更新或者是CoreDate聰明地坐視不理?

  • 是否有可能以某種方式紀念通知更改resultsControllers時不包括屬性?

回答

1

您可以使用setPrimitiveValue:forKey:改變NSManagedObject不發送任何通知的志願(其中觸發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

+0

我想這一點,但它似乎'setPrimitiveValue'也防止了持續的價值? – 2014-09-29 09:51:21

+0

我的意思是resultsControllers沒有被通知lastModified的變化,或者有可能區分更新,所以我可以過濾出不重要的變化。這樣我可以防止更新每個單元格。 – 2014-09-29 10:43:40

+0

如果保存其managedobjectcontext,setPrimitiveValue仍應保留這些值。我只是使用setprimitivevalue創建一個特殊的setter方法,後臺線程使用setprimitivevalue進行更新而不觸發KVO。 – devgeek 2014-09-29 17:30:46

相關問題