1

我有一个具有 30 个不同属性的 NSManagedObject 子类。在应用程序中,用户应该能够编辑(大部分)表格中的属性。有 3 个属性会根据其他属性组合的值自动设置。

例子:

@implementation myNSManagedObjectSubclass
@dynamic one; // edited by user in form
@dynamic two; // edited by user in form
@dynamic three; // edited by user in form
@dynamic four; // edited by user in form
@dynamic five; // edited by user in form
@dynamic icon; // automatically set based values of above 5 items
@end

我有两个问题:

1)关于在表格视图中构建用户可用于编辑对象的表单:除了对表格视图的内容进行硬编码之外,如何让我的表格视图仅为它需要显示的属性构建单元格? 我目前的想法是使用这个方法来遍历我的对象的所有属性,并有一个二进制“显示掩码”,表格视图可以使用它来确定它是否应该为特定项目显示一个单元格。有没有更好的办法?

2)关于根据其他属性的值自动设置一个属性:如何?我认为 KVO 在这里发挥了作用(我需要图标属性在它依赖的属性之一发生更改时立即在屏幕上更新)但我是 Core Data 的新手,我不确定我是否可以添加 KVO到 NSManagedObject 子类。

4

2 回答 2

1

对于 2,是的,KVO 可以帮助您解决这个问题。当对象从 fetch 唤醒以及观察到的属性发生变化时,该属性通常也是瞬态的并更新。

对于 1,考虑使用NSEntityDescription,具体attributesByName这样可以自动获取表格显示内容(如果要显示内部名称)和属性信息(这样就不会显示瞬态(派生)属性)。

于 2013-08-09T22:58:30.307 回答
1

广告二 - 我同意 Wain 的观点,即 KVO 很有用。但是,另一种标准方法是覆盖自定义托管对象类中的设置器。

广告一 - 遍历属性看起来像是一个很好的抽象,但我怀疑它会为您节省任何工作。正如您所指出的,您仍然必须创建一个“二进制显示掩码”来确定要使哪个属性可编辑。一旦在某处添加了一个属性,似乎很混乱......

我在这种情况下(40 个实体,100 个属性)有一个很好的经验,有一个可以用于此目的的简单“映射”plist。将属性输入到 plist 中(以所需的顺序)并添加其他属性确实非常快速和简单 - 如果发生变化,一个灵活的解决方案。

您仍然可以通过 NSEntityDescription 遍历属性以生成初始 plist。

于 2013-08-09T23:10:26.193 回答