ios - KVO addObserver 到CoreData对象的一对多关系

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

大家好多年阅读 StackOverflow,现在我决定加入。我正在努力解决这个问题:

我有一个“Depot”实体,它有两个对多关系“Persons”和“Trucks”。我想观察在给定“Depot”对象的情况下,其中一种关系(并了解是哪一种关系)发生变化(插入、删除)。

目前我正在这样做:

[mydepot addObserver:self forKeyPath:@"Trucks"options:NSKeyValueObservingOptionNew context:nil];

[mydepot addObserver:self forKeyPath:@"Persons"options:NSKeyValueObservingOptionNew context:nil];

但每次两个相关集合之一发生变化时,observeValueForKeyPath 都会被调用两次(每个键路径一次)。

我做错了吗?查看“更改”字典,(也使用 OptionOld 进行观察)显示没有意外更改(当我更改人员时,卡车没有更改)但仍然会发出通知。

谢谢,彼得罗

编辑:似乎两次“更改”字典都包含"new"字段中的整个关系。 (显然是一次人和一次卡车)

edit2:即使是简单的属性,它是否与 managedctx 保存操作有关?就好像当你保存时,整个对象被认为是改变了..

最佳答案

在 Key Value Observing Programming Guide 中说

If you're using Core Data, you can register the parent with the application's notification center as an observer of its managed object context. The parent should respond to relevant change notifications posted by the children in a manner similar to that for key-value observing.

这实际上意味着推荐的做法不是使用 addObserver:forKeyPath:options:context:,而是注册 NSManagedObjectContextDidSaveNotification

关于ios - KVO addObserver 到CoreData对象的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15658518/

相关文章:

ios - 我怎么 "Link my library statically"

mysql - View Controller 不在 View 层次结构中?

objective-c - XCode 4 中的 "Test After Build"选项不起作用

iphone - 从 AVCaptureAudioDataOutputSampleBufferDelegate 播放音频

ios - 通过 NSStream 判断连接建立成功和连接断开

ios - 排毒:iOS 模拟器如何在键盘上按 Next

ios - iPhone 5S 特定错误 : No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s)

ios - 目标属性映射在 Coredata 迁移时未在 xcmod​​elmappingmodel 中显示新添加的属性

ios - Xcode 显示在 CoreData 类上使用未声明的类型

ios - 带有 CoreData 和分页的 RestKit