我有应用程序在CoreData中存储树结构。 有一个ManagedObject,“Item”,它有属性:
parentId指向另一个Item对象。
如何使用父项的标题自动填充属性parentTitle?
答案 0 :(得分:1)
这是实现所需功能的可能性:
// 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的属性声明为readonly 无需声明Core Data属性“parentTitle”。
我在此解决方案中遇到的唯一问题如下:
由于使用keyPathsForValuesAffecting声明的依赖关系,视图会收到通知,但是对象A已经出现故障(并且在关闭时无法再次出现故障)Core Data是否会自动管理此类错误和观察问题?
答案 1 :(得分:1)
虽然马丁的建议是衍生价值的一个很好的解决方案,但我对你的问题是,你为什么要这个?你根本就没有操纵父母的价值。由于您只是访问它,请直接通过KVC访问父级,例如:
Item *item = ...;
NSString *title = [item valueForKeyPath:@"parent.title"];
//Do something with title
如果您要根据该值更改内容,则唯一需要使用keyPathsForValues...
功能的时间。如果您只是访问它,请直接使用KVC。