我在CoreData中定义了一个实体“ person”和一个与1-m相关的实体“ visit”。现在,我想在MacOS上使用带有COCOA绑定的NSArray控制器在相关表中显示和修改它们的值
我的项目用于MacOS,并且我在Swift中使用Xcode。 我已经使用Xcode构建器定义了数据结构和Viewcontroller对象。 “人员”表已经在工作,我可以添加或删除人员。但是,我找不到将“访问”表绑定到所选人员的方法。我尝试了几种选择,例如按照Master-detail using bindings with TWO NSTableViews中的建议连接“ visit”数组控制器的内容,但是所有这些最终都导致了编译时错误。
由于我正在使用可视Xcode构建器,因此目前代码并不多。这是我到目前为止所做的:
我已经使用Xcode数据模型构建器定义了两个实体类,然后使用了Storyboard接口构建器定义了两个表和数组控制器。然后,我将表视图的内容绑定到相应的数组控制器,并将列绑定到具有各自的实体属性的自己的表视图。我还添加了+和-按钮以添加一些行。到目前为止,一切正常。但是细节(“访问”)与任何“人”都没有关系。因此,我删除了“访问”表中的所有条目,并尝试将其数组控制器的内容绑定到所选人员。那就是我被困住的地方。 也许我错过了CoreData实体的一些初始化,但是我不知道如何进行
答案 0 :(得分:0)
我正在看我的macOS项目,该项目在Master-Detail中有两个NSTableView。
MasterAC.selection.details
,其中details
是主从关系的名称。 / li>
如果这不能解决问题,我可以进一步介绍一下。一旦使它们起作用,可可与macOS中的核心数据的绑定就会很漂亮:))
如果主从到多对多关系是无序集合,并且您使用的是旧式方法来在Detail实体上定义index
属性,则可以定义detailsOrdered
像这样在您的Master类中设置属性:
func detailsOrdered() -> [Any]? {
return details().arraySorted(byKeyPath: "index")
}
,然后绑定到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
}
}