从NSArraycontroller中删除的对象会保留在表中,直到被单击为止

时间:2009-12-11 15:24:32

标签: core-data nstableview nsarraycontroller

我有一个NSArraycontroller,它绑定到我的应用程序的AppDelegate的managedObjectContext。它充当下载队列。项目以编程方式添加到NSArraycontroller

我有一个表格,其中显示了两个字段,每个字段的值都单独绑定到所说的NSArraycontroller。当新的下载开始时,它将从NSArraycontroller以编程方式删除。

我已经添加了一个按钮,用于在队列启动之前从队列中删除下载,该按钮绑定到NSArraycontroller的remove:操作,该操作应删除表中的所选项目。

我的问题是,当点击删除按钮时,所选项目不会从表格中删除,它会一直保持在那里,直到单击表格中的另一个条目。按住鼠标按钮时选择项目所在的行会导致选择它,就像它仍然存在但没有值一样。

在控制台中,单击“删除”按钮时会出现以下内容: -[NSCFDictionary _setUnprocessedDeletion__:]: unrecognized selector sent to instance 0x2000f2220

如果我使用以编程方式从表中删除项目 [[downloadsArray content] removeObjectAtIndex:0]; [downloadsTable reloadData]; [downloadsTable deselectAll:nil]; 它似乎工作得很好,除了我仍然可以选择留下的隐形项目,只有当鼠标按钮关闭时才会保持选中状态。

我已将删除按钮的enabled属性绑定到NSArraycontroller的canRemove,这可以正常工作。

我有一个标签,显示队列中的项目数,这是绑定到NSArraycontroller,arrangeObjects,@ count。这在添加项目时可正常工作,但在删除项目时则无效。

对我所做错的任何想法都会非常感激。

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。事实证明,_setUnprocessedDeletion _:是一个为NSManagedObject定义的方法,显然当它从一个设置为Entity模式的数组控制器中删除时,它的消息被发送到一个对象。那是我的问题;经过一天的大量改造后,我最终得到了一个设置为Entity模式的数组控制器,其内容被绑定到一个常规对象数组而不是被管理对象。每当我删除一个对象时,就会发生其中一个错误。查看数组控制器的contentArray。

答案 1 :(得分:0)

当我尝试将NSFetchRequest与NSManagedObjectIDResultType一起使用时,我遇到了同样的问题,然后尝试使用 - [NSManagedObjectContext deleteObject:]删除结果。

解决方案:如果您打算删除返回的对象,请不要将NSManagedObjectIDResultType用于NSFetchRequest。