将基于视图的 NSOutlineView 绑定到 Core Data

2024-03-19

我正在尝试将新的基于视图的 OutlineView 实现为我的 Mac 应用程序中的源列表。不过,我无法获取要显示的值,因此我从核心数据应用程序模板制作了一个小型测试应用程序,但也无法让它在其中正常工作。

我在数据模型中定义了两个简单的类;我们称他们为“父母”和“孩子”。Parent具有单个属性“名称”和单个关系“孩子”。name是一个可选字符串,并且children是一个可选的多对多关系Child. Child具有相同的“名称”属性和一对一的“父”关系,这是相反的children。我为这两个生成了自定义类,并在中编写了一个存根Child for children返回nil.

我将源列表从对象库拖到我的 XIB 上,然后放入树控制器中。树控制器Children键路径设置为“children”,处于实体名称模式,“Parent”作为实体名称,选中“准备内容”,并将其托管对象上下文设置为应用程序委托的上下文。树控制器是大纲视图的数据源,我使用“objectValue.name”键路径将数据单元格的文本视图绑定到表单元格视图。

in -applicationDidFinishLaunching:我创建两个Parent实例,其中一个带有Child,并分配name每个对象的属性。

实际问题

现在,完成该设置后,我会在源列表中显示行,但文本字段为空,即使它们已绑定。我认为我不需要做任何其他事情,因为我正在使用绑定,并且我相当确定绑定到objectValue财产是正确的事情。出了什么问题?

如有必要,我可以提供更多详细信息,但我很确定这涵盖了我所做的一切。


哇,就像我两周前问的这个问题一样。

无论如何,如果你像我一样,问题是,
对于基于视图的NSOutlineViews,您需要实施

- (NSView *)outlineView:(NSOutlineView *)outlineView
     viewForTableColumn:(NSTableColumn *)tableColumn
                   item:(id)item;

委托方法并返回NSTableCellView你设置了,
或者他们只会给你一个空行。最简单的方法就是调用

[outlineView makeViewWithIdentifier:@"MyCell" owner:self]

替换MyCell与您输入的任何内容作为“用户界面项目标识符”
在身份检查器中为您NSTableCellView.

Objective-C:

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
   return [outlineView makeViewWithIdentifier:@"MyCell" owner:self];
}

Swift:

func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
    return outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("MyCell"), owner: self)
}

2018 年 8 月 2 日更新:

实际上,您不需要设置委托。这是我如何让它工作的(测试过NSTreeController,但应该与NSArrayController以及):

  • 将每个列对象绑定到arrangedObjects(没有模型密钥路径)
  • 将最里面的自定义视图(例如标签字段)绑定到objectValue.yourCustomValue
  • 应该不是必需的,但如果这不起作用,请尝试设置列和列的标识符TableCellView。确保两个标识符相同。对具有不同标识符的其余列重复此操作。

截屏:基于视图的 NSOutlineView 的绑定 https://i.stack.imgur.com/3ikla.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将基于视图的 NSOutlineView 绑定到 Core Data 的相关文章

随机推荐