【发布时间】:2013-04-30 09:20:18
【问题描述】:
我有一个 NSFetchedResultsController 使用谓词获取对象:
isTrash == NO
大多数情况下,这会按预期工作,但是当对象被清除时,获取的结果控制器不会获取未清除的对象。
怎么了?
【问题讨论】:
-
NSFetchedResultsController with predicate ignores changes merged from different NSManagedObjectContext 的可能重复项 - 请注意,该问题的答案与您的解决方案略有不同。
-
@MartinR 我同意这些问题非常相似。但是是否可以合并它们以便我的答案仍然出现? (我认为我的答案优于其他问题的公认答案,因为我的答案更好地解释了问题并提供了更好的解决方案。)
-
我认为任何答案都不会因为一个问题被标记为重复而消失。但是我没有经验是否/何时/如何合并问题。 - 你的解释很好(类似于我的stackoverflow.com/a/14021815/1187415 :-)。我不知道哪种解决方案更好,所以如果你有支持你的方法的论据,我很想知道它们!
-
@MartinR 我认为我的解决方案优越的原因是使用
existingObjectWithID:error:/refreshObject:mergeChanges:而不是objectWithID:/willAccessValueForKey:。existingObjectWithID:将回避由于无效objectIds 引起的任何问题(尽管这不太可能发生),refreshObject:mergeChanges:是一种更明确的强制获取对象的方式(willAccessValueForKey:是对 KVO 的误用.willAccessValueForKey:应该只在内部使用并且应该有一个匹配的didAccessValueForKey:)。 -
但您可以使用documented 来确保触发了故障。
标签: ios core-data concurrency nsfetchedresultscontroller