我正在使用NSArrayController
,NSMutableArray
并NSTableView
显示我自己的自定义对象的列表(尽管如果您也只是显示香草NSString
对象的列表,这个问题可能适用)。
在不同的时间点,我需要清除我的数组并刷新我的数据源中的数据。但是,仅调用removeAllObjects
我的NSMutableArray
对象不会触发 KVO 更新,因此屏幕上的列表保持不变。
NSArrayController
没有可用的 removeAllObjects
方法,这看起来很奇怪。(它确实有addObject
,我用它来添加对象,确保触发 KVO 并更新 UI。)
我设法使这种情况正确发生的最干净的方法是:
[self willChangeValueForKey:@"myArray"];
[myArray removeAllObjects];
[self didChangeValueForKey:@"myArray"];
...所以我不得不自己手动执行 KVO 通知(这是在我的测试应用程序类中,它包含myArray
属性,NSMutableArray
如前所述。)
这似乎是错误的 - 有更好的方法吗?从我的谷歌搜索来看,似乎有些人对removeAllObjects
in的缺乏感到困惑NSArrayController
,但还没有看到任何更好的解决方案。
我已经看到了这个解决方案:
[self removeObjectsAtArrangedObjectIndexes:
[NSIndexSet indexSetWithIndexesInRange:
NSMakeRange(0, [[self arrangedObjects] count])]];
但这对我来说看起来更不愉快。至少我的解决方案至少是少量的自我记录。
Apple 是否没有注意到有时人们可能想要清空通过NSArrayController
对象管理的列表控件?这似乎很明显,所以我想我一定错过了一些东西......
另外:当然,如果我向数组中添加新项目(通过NSArrayController
),那么这会触发带有 的 KVO 更新NSArrayController/NSTableView
,但是:
- 有时我不会在列表中放入任何项目,因为没有。所以你只看到旧物品。
- 无论如何,这有点恶心。