NSArrayController上的setSelectsInsertedObjects实际上没有选择

时间:2010-03-13 08:43:01

标签: objective-c nstableview nsarraycontroller

我有一个NSArrayController绑定到NSUserDefaults控制器,在Interface Builder中将setSelectsInsertedObjects设置为YES,但是当我单击Add时,先前选择的对象将被取消选择,而不是选择新添加的对象。

我错过了什么?

2 个答案:

答案 0 :(得分:3)

你是如何约束他们的?如果是通过NSArrayController的'content'绑定,那么我相信它会尝试将selectionIndexes绑定到同一个对象。这个类(NSIndexSet)不适用于NSUserDefaults(我不知道为什么,但我过去遇到了同样的问题 - 我认为它与它的对象生命周期有关;它被初始化为空,然后添加索引或者其他的东西)。 setSelectsInsertedObjects正在做的只是在添加新对象时自动更新selectionIndexes,并且基本上你的NSUserDefaults控制器搞乱了。我不确定它在哪里,但我想如果你在NSArrayController的绑定周围找到一个你会找到一个自动绑定到NSUserDefaults的selectionIndexes(或相关的东西);如果你取消选中,事情应该有效。

答案 1 :(得分:1)

正如我所理解的那样,这几乎是selectsInsertedObjects的含义。当用户添加新项目时,将选择新项目,替换之前的选择。

如果您需要不同的行为,可以扩展NSArrayController或创建自己的控制器类,该类使用NSArrayController作为委托,可能基于NSProxy。我相信你需要覆盖add:来:

  1. 保存当前选择
  2. 致电家长add:
  3. 将当前选择与已保存的选择合并
  4. 将选择设置为合并选择
  5. 但是,我对NSArrayController内部的了解不足以说明这是否有效。