我有在 CoreData 中存储树结构的应用程序。有一个 ManagedObject,“Item”,它具有以下属性:
- itemId(字符串)
- 项目清单
- 标题(字符串)
- 父 ID(字符串)
- 父级(与项目的关系)
- 父标题(字符串)
parentId 指向另一个 Item 对象。
如何使属性 parentTitle 自动填充父项的标题?
我有在 CoreData 中存储树结构的应用程序。有一个 ManagedObject,“Item”,它具有以下属性:
parentId 指向另一个 Item 对象。
如何使属性 parentTitle 自动填充父项的标题?
这是实现所需功能的可能性:
// implement in Item.m
// manages KVO notifications
+ (NSSet *)keyPathsForValuesAffectingParentTitle
{
return [NSSet setWithObjects:@"parent.title", nil];
}
// getter for parentTitle
- (NSString*) parentTitle
{
return [self valueForKeyPath:@"parent.title"];
}
另外在 Item.h 中将 parentTitle 的属性声明为只读 无需声明 Core Data 属性“parentTitle”。
我看到这个解决方案的唯一问题是:
由于使用 keyPathsForValuesAffecting 声明的依赖关系,视图会收到通知,但对象 A 仍然存在故障(并且在关闭时无法再次恢复故障)Core Data 是否自动管理此类故障和观察问题?
虽然 Martin 的建议是派生值的一个很好的解决方案,但我对你的问题是,你为什么想要这个?你永远不会操纵来自父母的价值。由于您只是访问它,因此直接通过 KVC 访问父级,例如:
Item *item = ...;
NSString *title = [item valueForKeyPath:@"parent.title"];
//Do something with title
您唯一需要使用该keyPathsForValues...
功能的情况是您正在根据该值更改某些内容。如果你只是访问它,直接使用 KVC。