详细应用:绑定困难

我正在Cocoa编写我的第一个主细节视图。 我的数据模型非常简单:只是一个NSMutableArray,其中包含具有几个NSString属性的单个类的实例。

以下是我迄今为止创建的内容:

  • 表示实例的类。
  • 一个NSMutableArray被指定为我的应用程序委托的属性来保存类实例。
  • 主详细视图,带有NSTable和一些文本字段以保存选择实例的属性。
  • 带指定应用程序委托的绑定的NSArrayController,以及作为模型关键路径的NSMutableArray属性的名称。
  • NSTable和NSArrayController的列之间的绑定(controller key =“arrangedObjects”,每个列的模型键路径=该类的一个属性)。
  • 视图和选择的文本字段(控制器键=“选择”,每个文本字段的模型键路径=类的属性)之间的绑定。
  • 视图中的“+”按钮和“ - ”按钮可以添加和删除对象。
  • 但是,这个设计有两个问题:

    (1)我找不到实现“+”和“ - ”按钮的好方法。 首先,我将它们绑定到数组控制器的add:和remove:属性。 虽然这似乎工作,但它有一个问题:我的类声明一个初始化NSStrings为存根值的init成员,但数组控制器似乎没有[init]新实例,因为新的列表条目有空字符串每列。

    接下来,我将它们附加到我的应用程序委托中的IBActions中,该应用程序委托从NSMutableArray添加或删除了一个对象。 但是,这感觉不对 - 感觉就像我违反了模型 - 视图 - 控制器体系结构,而不是与阵列控制器交谈。 例如,“ - ”功能必须与阵列控制器通信以获取选定的项目。 另外,我注意到在更改数组后,我必须发送一个[didChangeValueForKey]消息 - 这感觉就像一个信号,表明我做错了。

    (2)在我看来,其中一个细节子视图是绑定到所选对象中的NSString的NSTextView。 它确实无法按预期工作:输入新文本时,即使选择了其他类别的成员(应具有不同的值),文本仍保持不变。 此外,文本数据不会被保存到类的任何实例。

    有什么想法吗? 提前致谢。


    这是一个应该接近你想要的例子:

    #import "AppDelegate.h"
    #import "Members.h"
    
    @implementation AppDelegate
    
    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
        self.theData = [NSMutableArray arrayWithObject:[[Members alloc] init]];
    }
    
    -(IBAction)addMember:(id)sender {
        [self.controller addObject:[[Members alloc] init]];
    }
    
    -(IBAction)removeMember:(id)sender {
        [self.controller removeObjectAtArrangedObjectIndex:self.controller.selectionIndex];
    }
    

    数组控制器(其IBOutlet是控制器)将其内容数组绑定到data。 成员是我的班级的名称,有3个字符串属性,名称,作者和blurb。 在详细视图中,2个文本字段绑定到ArrayController.selection.name或作者,就像你说的那样。 另一个属性blurb以同样的方式绑定(ArrayController.selection.blurb),但绑定到文本视图的Attributed String值。 这工作得很好,我不确定你的文本视图的麻烦是什么。 如果我将文本添加到文本视图中,如果我在母表中单击另一行然后单击后(如果我登录数组,它也会显示在那里),它会显示在那里。

    链接地址: http://www.djcxy.com/p/85273.html

    上一篇: detail application: Binding difficulties

    下一篇: initializing a cocoa IB binding