我在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是一个托管对象,它与位置有1-1关系。 (每个事件都有1个位置对象,反之亦然)
奇怪的是,如果在将事件对象设置为属性viewController.event之前未触发“location”关系,则会出现以下错误:
*** 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
NSFetchRequest
用于NSFetchedResultsController
{@ 1}}和@“location”密钥路径,这对bug来说是一个更漂亮的解决方法,但奇怪的是虫子暂时消失了。我唯一做的就是进一步开发应用程序,这意味着我多次重新安装应用程序。因此,当DB再次变大时,它可能会重新出现。如果发生,我会更新它