如何将NSManagedObject属性绑定到另一个窗口的表?

时间:2013-12-04 13:51:24

标签: objective-c cocoa core-data cocoa-bindings

我想创建一个检查器窗口,就像Preview mac应用程序的检查器窗口一样 我有一个NSManagedObject模型子类,并希望检查它的属性

我有一个主窗口,包含对象表,另一个窗口用于显示主窗口中所选对象的属性

我的模型是:(并且它必须是通用的,检查员必须能够检查任何NSManagedObject子类实例,因此不会给出属性名称)

@interface Metadata : NSManagedObject

@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * mail;

@end

检查员窗口的表格如下:

 -------------------------------------------------
|type              name              value        |
|-------------------------------------------------|
|NSString            title             "sample"   |
|NSString            name              "sample"   |
|NSString            mail            "sample@mail"|
|_________________________________________________|

当然,在检查器窗口中更改将更新主窗口中的值,反之亦然

问题是我无法直接将检查器窗口绑定到模型,因为我想绑定到它的属性,所以我有一个模型,它有3个属性可以在3行表中查看,每个属性都在一行

如果我创建一个新类来保存托管模型的属性,我将丢失绑定引用,甚至可能无法正常工作

问题是:我不能将单个(NSManagedObject子类,在本例中为Metadata)实例的属性显示为表,不仅是列,而是每个属性的行

1 个答案:

答案 0 :(得分:0)

拥有主窗口的对象(例如,文档)应该具有所有对象的数组和所选行的索引集的属性。

在检查器中,将数组控制器绑定到文档的那些属性:

  • content
    • 绑定到:文档
    • 控制器密钥:(应禁用,IIRC)
    • 型号关键路径:allObjects
  • selectionIndexes
    • 绑定到:文档
    • 控制器密钥:(应禁用,IIRC)
    • 型号关键路径:selectionIndexes

请记住,模型键路径标识您要绑定的属性,因此如果您将两个属性称为不同的属性,则必须更改模型键路径以匹配。

然后,通过该阵列控制器绑定检查器的视图。

  • value
    • 绑定到:阵列控制器
    • 控制器密钥:selectedObjects
    • 模型关键路径:titlenamemail

您可以执行相同的操作来提供表视图:为文档创建单独的数组控制器,以相同的方式绑定,并通过数组控制器将表列的value绑定绑定到元数据属性。