如何将文本字段绑定到包含一行的一个核心数据实体的属性?

时间:2011-09-06 02:56:21

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

我有一个想要显示我的应用的汇总使用数据的视图。方便的是,我有一个cocoa核心数据实体,其中所有的使用数据都是预先聚合的(所以它只有一行)。我想将实体中的每个单独属性绑定到不同的NSTextFields(例如,不在NSTableView中)。

这似乎不是核心数据+界面构建器处理得很好的使用模式。到目前为止,我正在做的是将我的聚合属性复制到NSUserDefaults并将我的文本字段绑定到默认值。我想要一个更好,更优雅的方式来做到这一点。

那里有更好的想法吗?我是否需要用一个很大的线索砸在脑袋里?

一如既往地感谢阅读...

2 个答案:

答案 0 :(得分:1)

好的,我只是用自己的大胖线索打了自己的脑袋。 解决方案是使用NSObjectController。

  1. 将NSObjectController的实例作为IBOutlet添加到NSWindowController实现中。
  2. 将NSObjectController添加到对话框的xib并将字段绑定到它。
  3. 将视图/窗口控制器(文件所有者)中的NSObjectController链接到xib中的NSObjectController。
  4. 实施控制器的windowDidLoad。
  5. 就我而言,它在标题中看起来像这样:

    NSObjectController *dataCtrl;
    ...
    @property (nonatomic, retain) IBOutlet NSObjectController *dataCtrl;
    

    在实现中就像这样

        @synthesize dataCtrl;
        ...
        - (void)windowDidLoad
        {
            NSManagedObject *totals = [StatsSupport getTotalRecord];
            [[self dataCtrl] setContent:totals];   // where the rubber meets the road
            [super windowDidLoad];
        }
    

    当然+ [StatsSupport getTotalRecord]是你的基本核心数据获取类型代码,如果你读到这一点,你就会知道它的外观。 (它可能已经存在,因为你需要这个代码或类似的东西只是为了执行正常的数据读取/更新)

    最后做一个快乐的舞蹈,因为你让可可为你做了一些工作。

答案 1 :(得分:0)

-(void)updateFields {
  // fetch the row from the persistent store into your custom object
  // then get a reference to the data in your object, e.g.
  MyDataObject *data = [resultsArray objectAtIndex:0];

  myTextField1.text = [NSString stringWithFormat:@"%d", [data.anIntegerValue intValue]];
  myTextField2.text = data.aTextValue; 
  // etc...
}