包含关系的managedobject keypath观察器的KVO相关异常

时间:2013-09-24 20:36:53

标签: ios objective-c core-data key-value-observing kvc

我在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再次变大时,它可能会重新出现。如果发生,我会更新它

0 个答案:

没有答案