我有一个关于核心数据和通知的问题。阅读 Apple 文档后,我没有找到答案。
这就是问题所在:
我有一个具有一对多关系的托管对象。我想知道何时从这种关系中添加或删除了一个对象。(一个“类别”有很多“项目”)我用它来知道何时添加或删除项目的类别:
[category addObserver:self forKeyPath:@"items"
options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
context:nil];
然后调用这个方法:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
问题:
假设一个类别有 2 个项目,我删除了其中一个。现在该类别只有 1 个项目。但是,如果我从 启动一个获取的请求observeValueForKeyPath
,它会说该类别有 2 个项目,但这是错误的,因为它现在有 1 个。
我想这是因为observeValueForKeyPath
在保存上下文时调用,[context save:&error]
(这是我在 Apple 文档中找到的唯一内容),也许修改[context save:&error]
在行结束之前无效。因此,为了测试我的理论,我修改了我的observeValueForKeyPath
代码,并将所有代码移到了一个方法中,我使用了:
[self performSelector:@selector(launchFetchedRequest)
withObject:nil afterDelay:0];
为了在下一个运行循环中执行该方法,也就是在[context save:&error]
. 瞧,现在一切正常。
那么,如果我想在内部启动一个 fetch 请求observeValueForKeyPath
,我是否必须在下一个运行循环中启动它?这是正常行为吗?你通常是怎么做的?
我想知道你对这个话题的看法。提前致谢。