我有一个Core Data对象(AGroup),它与其他Core Data对象(项目,它们是ANItem的实例)的集合具有多对多关系。我在UITableView中使用AGroup对象(这是在iOS上),项目的显示顺序由项目上的属性(sortProperty)决定。所以,代码明智(忽略它们是核心数据对象,所以这是半伪代码)它看起来像这样:
@interface AGroup : NSManagedObject
{
NSSet *items; // these are instances of ANItem
}
@property (retain) NSSet *items;
@end
@interface ANItem : NSManagedObject
{
NSNumber *sortProperty;
}
@property (retain) NSNumber *sortProperty;
@end
好的,所以,这里的重点是UITableView有一个AGroup对象的实例,并显示项目列表,显示项目的顺序由sortProperty属性决定。
所以,我想知道sortProperty何时在ANItem的实例上发生更改,以便我可以更新表视图。我想知道,有没有办法可以使用KVO从AGroup对象中观察sortProperty?类似的东西:
[group addObserver:self forKeyPath:@"items.sortProperty" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];
甚至:
[group addObserver:self forKeyPath:@"items.@sum.sortProperty" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];
会起作用,因为当值发生变化时总和会发生变化。
我尝试过这个,但是我得到了一个无效的参数错误。
有人知道这是否可行?如果是这样,怎么样?
我意识到我可以执行获取请求并通过sortProperty对请求进行排序,但由于某些其他应用程序架构的限制,在这种情况下实际上并不可能。从本质上讲,这种情况归结为想象我只是处理对象关系中的普通旧NSSet。我只提到核心数据方面,以防由于额外的限制等影响答案?
答案 0 :(得分:1)
我很确定没有办法直接观察像这样的集合的内容。我认为最好的办法是定义符合KVC / KVO的set访问器/ mutator,观察self.items,并使用更改通知在每个对象添加到集合时直接观察sortProperty。
由于这是Core Data,您可能还需要使用上下文保存通知来检测项目中的更改。我对Core Data没有足够的经验可以肯定地说。