gpt4 book ai didi

objective-c - 我的第一个 Cocoa 主从应用程序 : Binding difficulties

转载 作者:行者123 更新时间:2023-12-03 17:56:55 25 4
gpt4 key购买 nike

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

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

  • 代表实例的类。
  • 指定为我的应用委托(delegate)的属性以保存类实例的 NSMutableArray。
  • 主详细信息 View ,带有 NSTable 和一些用于保存选择实例属性的文本字段。
  • 一个 NSArrayController,其绑定(bind)指定应用程序委托(delegate),并将 NSMutableArray 属性的名称作为模型键路径。
  • NSTable 和 NSArrayController 的列之间的绑定(bind)( Controller 键 =“arrangedObjects”,每列的模型键路径 = 类的属性)。
  • View 的文本字段和选择之间的绑定(bind)( Controller 键 =“选择”,每个文本字段的模型键路径 = 类的属性)。
  • View 中的“+”按钮和“-”按钮可用于添加和删除对象。

但是,我的设计有两个问题:

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

接下来,我将它们附加到我的应用程序委托(delegate)中的 IBActions,该委托(delegate)在 NSMutableArray 中添加或删除了一个对象。然而,这感觉是错误的 - 感觉就像我不与数组 Controller 对话就违反了模型- View - Controller 架构。例如,“-”函数必须与数组 Controller 通信才能获取所选项目。另外,我注意到我必须在更改数组后发送一条 [didChangeValueForKey] 消息 - 这感觉像是一个信号,表明我做错了。

(2) 我的 View 中的详细信息 subview 之一是绑定(bind)到所选对象中的 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];
}

数组 Controller (其 IBOutlet 是 Controller )将其内容数组绑定(bind)到 theData。 Members 是我的类的名称,它有 3 个字符串属性:名称、作者和简介。在详细信息 View 中,两个文本字段绑定(bind)到 ArrayController.selection.name 或作者,就像您所说的那样。另一个属性,blurb,以相同的方式(ArrayController.selection.blurb)绑定(bind),但绑定(bind)到 TextView 的属性字符串值。这工作得很好,我不确定你的 TextView 有什么问题。如果我将文本添加到 TextView 中,如果我单击母表中的另一行然后单击返回,它确实会显示在那里(如果我记录数组,它也会显示在那里)。

关于objective-c - 我的第一个 Cocoa 主从应用程序 : Binding difficulties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11813193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com