gpt4 book ai didi

objective-c - NSTreeController 具有两个不同的核心数据 NSManagedObject 实体

转载 作者:行者123 更新时间:2023-12-03 16:38:43 25 4
gpt4 key购买 nike

我正在将我的 iOS 应用程序移植到 Mac,并希望设置一个 NSTreeController 来管理实体的层次结构。此层次结构中有两种不同的 NSManagedObject 类型:Group 和 Item,它们具有一对多关系(一个 Group 到多个 Item)。但是我在设置 NSTreeController 时遇到了麻烦;我收到一条错误消息:

[<NSManagedObject 0x10029c410> valueForUndefinedKey:]: the entity Item is not key value coding-compliant for the key "items".

似乎 NSTreeController 旨在使用一个类型的 NSManagedObject 进行设置,其子级引用自身,并且让子级成为不同类型的对象不起作用。它是否正确?如果是这样,我需要做什么来纠正这个问题,同时保持新数据模型能够使用轻量级迁移从旧数据模型正确迁移?如果我确实能够使用两种不同类型的 NSManagedObject 来完成 NSTreeObject,我应该如何设置它?

最佳答案

NSTreeController 中使用的所有实体都必须响应由 setChildrenKeyPath: 设置的指定子消息。在本例中,这将是items。换句话说,树结构中的所有对象都必须响应 items 消息,即使该对象永远不会有任何子对象

例如假设您想要对文件系统建模并使用 NSTreeController 显示它。您必须有一个如下所示的数据模型:

FileSystemObject{
name:
parent<<-->FileSystemObject.children
children<-->>FileSystemObject.parent
}

Folder:FileSystemObject{
}

File::FileSystemObject{
}

然后,您将重写为 FileSystemObject 提供一个自定义方法,该方法将返回子项的计数。您可以使用 setCountKeyPath: 向 NSTreeController 提供方法名称。重写 Folder 中的方法以返回子级的实际计数,并重写 File 中的方法以返回零。

这就是为什么 NSTreeController 没有被很好地考虑的原因。与其他 Controller 不同,它通过强制您更改数据模型来满足 UI 的需求来破坏封装,这是非常糟糕的做法。

有人编写了一个替换树 Controller ,它只是自动假设任何不响应子键路径的对象都是叶子,并提供自动子计数为零。不幸的是,我现在找不到它,也不记得它叫什么了。

关于objective-c - NSTreeController 具有两个不同的核心数据 NSManagedObject 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6485277/

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