gpt4 book ai didi

swift - 如何使用 NSArray 绑定(bind)在两个 NSTableView 中显示两个 1 米相关的 CoreData 实体

转载 作者:行者123 更新时间:2023-11-30 10:43:07 25 4
gpt4 key购买 nike

我在 CoreData 中定义了一个实体“person”和一个 1-m 相关实体“visit”。现在我想在 MacOS 上使用带有 COCOA 绑定(bind)的 NSArray Controller 来显示和修改相关表中的值

我的项目适用于 MacOS,我正在使用 Xcode 和 Swift。我已经使用 Xcode 构建器定义了数据结构和 Viewcontroller 对象。 “人员”的表已经可以使用,我可以添加或删除人员。但是,我无法找到将“访问”表绑定(bind)到所选人员的方法。我尝试了几个选项,例如按照 Master-detail using bindings with TWO NSTableViews 中的建议连接“访问”数组 Controller 的内容。 ,但最终都出现了编译时错误。

由于我正在使用可视化 Xcode 构建器,因此目前代码不多。这是我到目前为止所做的:

我已经使用 Xcode 数据模型构建器定义了两个实体类,然后使用 Storyboard 界面构建器定义了两个表和数组 Controller 。然后,我将 TableView 内容绑定(bind)到相应的数组 Controller ,并将列绑定(bind)到具有相应实体属性的自己的 TableView 。我还添加了 + 和 - 按钮来添加一些行。到目前为止一切正常。但细节(“访问”)与任何“人”没有联系。因此,我删除了“访问”表中的所有条目,并尝试将其数组 Controller 的内容绑定(bind)到所选人员。这就是我陷入困境的地方。也许我错过了 CoreData 实体的一些初始化,但我不知道如何继续

最佳答案

我正在查看我正在运行的 macOS 项目,该项目在 Master-Detail 中有两个 NSTableView。

  • .xib 有两个数组 Controller ,一个用于主实体和一个详细实体。我们将它们称为 MasterAC 和 DetailAC。主表和详细表列绑定(bind)到这些数组 Controller 。
  • 在 DetailAC 的绑定(bind)中,内容数组绑定(bind)绑定(bind)到:MasterAC.selection.details ,其中details是主从关系的名称。
  • 在 MasterAC 和 DetailAC 的绑定(bind)中,两者中的托管对象上下文绑定(bind)都绑定(bind)到相同的托管对象上下文。
  • 在数组 Controller 中,这两个绑定(bind)(内容数组托管对象上下文)被绑定(bind)。

如果这不能解决问题,我可以再研究一下。一旦你让 Cocoa 与 macOS 中的 Core Data 一起工作,它们就会变得非常漂亮:))

附录。如果您有订购的套装

如果主从到详细到多关系是无序集,并且您使用的是定义 index 的老式方法。详细信息实体上的属性,您可以定义 detailsOrdered您的 Master 类中的属性如下所示:

func detailsOrdered() -> [Any]? {
return details().arraySorted(byKeyPath: "index")
}

然后绑定(bind)到MasterAC.selection.detailsOrdered而不是MasterAC.selection.details .

上述实现需要对 Set 进行以下扩展:

extension Set<AnyHashable> {
func arraySorted(byKeyPath keyPath: String?) -> [Any]? {
let unorderedArray = Array(self)
let sortDescriptor = NSSortDescriptor(key: keyPath, ascending: true)
let orderedArray = (unorderedArray as NSArray).sortedArray(using: [sortDescriptor])
return orderedArray
}
}

关于swift - 如何使用 NSArray 绑定(bind)在两个 NSTableView 中显示两个 1 米相关的 CoreData 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56373316/

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