我有一个核心数据对象 (AGroup),它与其他核心数据对象(项目,是 ANItem 的实例)的集合具有一对多关系。我在 UITableView(这是在 iOS 上)中使用 AGroup 对象,项目的显示顺序由项目的属性 (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 何时更改,以便我可以更新 TableView 。我想知道,有没有办法可以使用 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。我只提到核心数据方面,以防由于其他限制/等而影响答案?
最佳答案
我很确定没有办法像那样直接观察集合的内容。我认为最好的办法是定义符合 KVC/KVO 的集合访问器/修改器,观察 self.items,并在每个对象添加到集合时使用更改通知直接观察 sortProperty。
由于这是 Core Data,您可能还/需要使用上下文保存通知来检测项目中的更改。我没有足够的核心数据经验来肯定地说。
关于objective-c - 使用 KVO 观察 Objective-C 集合中对象属性的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5691621/