【发布时间】:2009-06-22 18:22:46
【问题描述】:
我一直在构建一个核心数据应用程序来管理一些数据,但我被一个表明我的对象不符合 KVO 的错误所困扰。但是,我还没有修改 NSManagedObject 的默认 KVO 合规性,现在我只能摸不着头脑了。
该错误影响的应用程序区域是创建一些类别并组织将存在于这些类别中的一些项目。项目可能存在多个类别,用户可以设置项目和类别查看顺序。简单的东西。
为了更好地可视化这一点,我设置的核心数据模型的关键部分如下所示。我稍微简化了实体的命名和属性:
Category <--------->> CategoryItem <<---------> Item
-------- ------------ --------
name viewPosition name
viewPosition description
这个模型在interface builder中连接了两个ArrayController,一个用于category,一个用于categoryitems。 categoryitems 内容集通过 selection.categoryItems 绑定设置为类别数组控制器。这些数组控制器提供两个表视图。 category items表的内容通过arrangedObjects.item.name绑定到CategoryItem A.C控制器。
这一切都完美无缺,我正在根据自己的心愿拖放和排序项目和类别。
除了一个奇怪的案例。
每当我创建一个只有一个项目的类别时,然后保存,如果我随后重新打开该文档,则会出现以下错误:
无法从<NSManagedObject 0x16273380> 中删除键路径“item.name”的观察者<NSTableBinder 0x1627f670>,很可能是因为键“item”的值已更改而未发送适当的KVO 通知。检查 NSManagedObject 类的 KVO 兼容性。
之后界面似乎崩溃了,应用程序变得无法使用。我在网上搜索过,我所能发现的只是这表明 KVC 不合规。但我在这里使用的是标准的、几乎没有修改过的 Apple 类。
当我仅绑定到 CategoryItem 的 viewPosition 时,该错误不会引发。即通过排列对象.viewPosition 而不是排列对象.item.name。就好像 categoryitem 和 item 之间的关系在表格最初观察到的那一点上还没有准备好(并且仅当有一个 item 时)。
有没有其他人遇到过这种情况?谁能想到一个可能的解决方法?
【问题讨论】:
-
我已将其范围缩小到阵列控制器,该控制器将表格设置为自动重新排列内容。关闭时,不会发生错误,非常感谢任何有关如何解决此问题的提示...
标签: objective-c cocoa macos core-data