1

我在 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" 键路径的那个可能是一个更漂亮的解决该错误的方法,但奇怪的是,这个错误目前已经消失了。我唯一做的就是进一步开发应用程序,这意味着我确实重新安装了几次应用程序。因此,当数据库再次变大时,它可能会重新出现。如果发生这种情况我会更新NSFetchRequestNSFetchedResultsController

4

0 回答 0