使用KVO观察Objective-C中集合内对象的属性更改

我有一个核心数据对象(AGroup)与其他核心数据对象(项目,这是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做一个获取请求并对请求进行sorting,但由于其他应用程序体系结构的限制,在这种情况下这是不可能的。 所以,基本上,这种情况归结为想象我正在处理一种普通的旧NSSet在一种对象types的关系。 我只提到核心数据方面的情况下,由于额外的限制/等影响的答案?

林相当肯定没有办法直接观察这样的集合的内容。 我认为最好的select是定义符合KVC / KVO标准的集访问器/增变器,观察self.items,并使用更改通知直接观察添加到集合中的每个对象的sortProperty。

由于这是核心数据,您可能还需要使用上下文保存通知来检测项目中的更改。 我没有足够的经验与核心数据说,但肯定。