1

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

我错过了什么?

4

2 回答 2

3

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

于 2010-03-16T03:25:20.330 回答
1

据我了解,这几乎是什么selectsInsertedObjects意思。当用户添加新项目时,将选择新项目,替换之前的选择。

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

  1. 保存当前选择
  2. 打电话给家长add:
  3. 将当前选择与保存的选择合并
  4. 将选择设置为合并的选择

但是,我对 NSArrayController 内部的了解还不够,无法说明这是否可行。

于 2010-03-16T02:48:07.850 回答