我在 viewController 的 init 方法中观察到了一个关键路径。( event 是这个 viewController 的一个属性
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...// some code
[self addObserver:self forKeyPath:@"event.location.title"
options:NSKeyValueObservingOptionNew context:NULL];
...// some more code
}
event 是一个托管对象,它与 location 是 1-1 的关系。(每个事件有 1 个位置对象,反之亦然)
奇怪的是,如果在将事件对象设置为属性 viewController.event 之前没有触发“位置”关系,那么我会收到以下错误:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Cannot update for observer <NSKeyValueObservance 0x17627340> for the key path
"location.title" from <Event 0x176de540>, most likely because the value for the key
"location" has changed without an appropriate KVO notification being sent. Check the
KVO-compliance of the Event class.'
正如我所说,如果我在将托管对象设置为 viewController 的属性之前添加以下行,则此错误已修复,在这种情况下它不会崩溃,并且可以正常工作
Location* location = event.location;
viewController.event = event;
显然,这是一种解决方法。有关纠正此问题的任何想法?
编辑
我认为也许使用我用于setRelationshipKeyPathsForPrefetching
@ "location" 键路径的那个可能是一个更漂亮的解决该错误的方法,但奇怪的是,这个错误目前已经消失了。我唯一做的就是进一步开发应用程序,这意味着我确实重新安装了几次应用程序。因此,当数据库再次变大时,它可能会重新出现。如果发生这种情况我会更新NSFetchRequest
NSFetchedResultsController