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

使用KVO观察Objective-C中集合内对象属性的更改,objective-c,ios,core-data,ios4,Objective C,Ios,Core Data,Ios4,我有一个核心数据对象(AGroup),它与其他核心数据对象(项,即ANItem的实例)的集合具有对多关系。我在UITableView中使用AGroup对象(这在iOS上),项目的显示顺序由项目上的属性(sortProperty)决定。因此,在代码方面(忽略它们是核心数据对象,所以这是半伪代码),它看起来是这样的: @interface AGroup : NSManagedObject { NSSet *items; // these are instances of ANItem } @

我有一个核心数据对象(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属性决定

因此,我想知道ANItem实例的sortProperty何时更改,以便更新表视图。我想知道,有没有一种方法可以使用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];
这样就行了,因为当值改变时,总和也会改变

不过,我尝试过这个方法,但得到了一个无效的参数错误

有人知道这是否可能吗?如果是,怎么做


我意识到我可以执行一个fetch请求并按sortProperty对请求进行排序,但是由于其他一些应用程序架构的限制,在这种情况下这是不可能的。所以本质上,这可以归结为想象,我只是在处理一个简单的对象关系中的旧NSSet。我只提到了核心数据方面,以防由于其他限制而影响答案。

我很确定没有办法直接观察这样一个集合的内容。我认为最好的办法是定义与KVC/KVO兼容的集合访问器/变体,观察self.items,并使用更改通知直接观察添加到集合中的每个对象上的sortProperty


因为这是核心数据,所以您可能还需要使用上下文保存通知来检测项目中的更改。不过,我没有足够的核心数据经验可以肯定地说

我很确定没有办法直接观察这样一个收藏的内容。我认为最好的办法是定义与KVC/KVO兼容的集合访问器/变体,观察self.items,并使用更改通知直接观察添加到集合中的每个对象上的sortProperty

因为这是核心数据,所以您可能还需要使用上下文保存通知来检测项目中的更改。不过,我没有足够的核心数据经验可以肯定地说