Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何将textfields绑定到包含一行的核心数据实体的属性?_Objective C_Cocoa_Core Data_Interface Builder_Cocoa Bindings - Fatal编程技术网

Objective c 如何将textfields绑定到包含一行的核心数据实体的属性?

Objective c 如何将textfields绑定到包含一行的核心数据实体的属性?,objective-c,cocoa,core-data,interface-builder,cocoa-bindings,Objective C,Cocoa,Core Data,Interface Builder,Cocoa Bindings,我有一个视图,希望显示我的应用程序的汇总使用数据。很方便,我有一个cocoa核心数据实体,其中预聚合了所有使用数据(因此它只有一行)。我想将实体中的每个单独属性绑定到不同的NSTextFields(例如不在NSTableView中) 这似乎不是核心数据+界面生成器可以很好地处理的使用模式。到目前为止,我所做的是将聚合属性复制到NSUserDefaults中,并将文本字段绑定到默认值。我想要一个更好的,优雅的方式来做这件事 还有更好的主意吗?我需要被一个大大的线索打在头上吗 一如既往地感谢您阅读…

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

这似乎不是核心数据+界面生成器可以很好地处理的使用模式。到目前为止,我所做的是将聚合属性复制到NSUserDefaults中,并将文本字段绑定到默认值。我想要一个更好的,优雅的方式来做这件事

还有更好的主意吗?我需要被一个大大的线索打在头上吗


一如既往地感谢您阅读…

好的,我只是用自己的大线索撞到了自己的头。
-(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...
}
解决方案是使用NSObjectController

  • 将NSObjectController实例作为IBOutlet添加到NSWindowController实现中
  • 将NSObjectController添加到对话框的xib中,并将字段绑定到该对话框
  • 将视图/窗口控制器(文件所有者)中的NSObjectController链接到xib中的NSObjectController
  • 实现控制器的windowDidLoad
  • 在我的例子中,它在标题中是这样的:

    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]是基本的核心数据获取类型代码,如果你读到这里,你就会知道它是什么样子。(它可能已经存在,因为您需要此代码或类似的代码来执行正常的数据读取/更新)


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

    你已经看过苹果提供的Recipes core data示例程序了吗?没有。我想你的意思是-,我会检查它的,现在我已经看过了,但是没有,它没有抓到这个特别的痒点。啊,我想我记得在那里看到过类似的东西。数据绑定示例执行我看到的所有绑定示例所执行的操作-通过nsarraycontroller将所有数据绑定到一个表。(然后字段被绑定到数组中选定的对象。)因此,另一种方法是在对话框上有一个隐藏的表…hack hack hack…我猜优雅是指没有代码或几乎没有代码。我现在要做的就是编写这么多代码(将数据复制到用户默认值中)。我试图实现绑定的很少代码潜力。一般来说,objective C是一种相当“冗长”的语言。我有点习惯了。我认为这是有意的,它确实使阅读代码变得更容易。是的,确实很详细——在类中声明,“@property”+“@synthesis”。我同意。Interface Builder是一个可用的gui工具,我希望尽可能多地利用它。。。因此这篇看似不切实际的文章。