objective-c - 使用 KVO 观察 Objective-C 集合中对象属性的变化

标签 objective-c ios core-data ios4

我有一个核心数据对象 (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/

相关文章:

ios - 如何创建Core Data数据库swift 4

ios - 滚动ios时数字递增动画

IOS - UIViewController 不会旋转

ios - Xcode IBOutlet 链接错误

objective-c - 访问已发布的 NSString 不会使应用程序崩溃

ios - 核心数据获取请求关系属性谓词

ios - 核心数据更新所有 "index"属性 (iOS)

ios - 不使用 UIImagePickerController 获取相机胶卷照片

ios - 在 iOS 中渲染圆圈的最佳技术是什么?

ios - 删除[环境: Sandbox]