
在不同的时间点,我需要清除我的数组并刷新数据源中的数据.但是,仅在我的NSMutableArray对象上调用removeAllObjects不会触发KVO更新,因此屏幕上的列表保持不变.
NSArrayController没有可用的removeAllObjects方法,这看起来很奇怪. (它确实有addobject,我用它来添加对象,确保触发KVO并更新UI.)
我设法使这种情况正确发生的最干净的方法是:
[self willChangeValueForKey:@"myArray"];[myArray removeAllObjects];[self dIDChangeValueForKey:@"myArray"];
…所以我有点必须自己手动进行KVO通知(这是我的测试应用程序类,它包含myArray属性,如上所述,它是NSMutableArray.)
这似乎是错误的 – 有更好的方法吗?从我的谷歌搜索似乎有一些人对NSArrayController中缺少removeAllObjects感到困惑,但没有看到任何更好的解决方案.
我见过这个解决方案:
[self removeObjectsAtArrangedobjectIndexes: [NSIndexSet indexSetWithIndexesInRange: NSMakeRange(0,[[self arrangedobjects] count])]];
但这看起来对我来说更加不愉快.至少我的解决方案至少是自我记录.
Apple没有注意到有时人们可能想要清空通过NSArrayController对象管理的列表控件吗?这看起来很明显,所以我想我一定错过了什么……
旁白:当然,如果我向数组添加新项目(通过NSArrayController),那么这将触发使用NSArrayController / NStableVIEw的KVO更新,但是:
>有时我不会在列表中放任何项目,因为没有.所以你只看到旧物品.
>无论如何,这有点令人讨厌.
如果将数组控制器的内容数组绑定绑定到某个其他对象的数组属性,那么您应该使用该对象的该属性.使用[[object mutableArrayValueForKey:@“property”] removeAllObjects].
另一方面,如果您尚未绑定数组控制器的内容数组绑定,则需要直接与其内容进行交互.使用[[arrayController mutableArrayValueForKey:@“content”] removeAllObjects]. (您也可以使用arrangeObjects而不是内容.如果一个不起作用,请尝试另一个 – 我只是第一种方式做事,将数组控制器绑定到其他东西.)
总结以上是内存溢出为你收集整理的cocoa – 我应该如何从NSArrayController控制的NSTableView中删除所有项目?全部内容,希望文章能够帮你解决cocoa – 我应该如何从NSArrayController控制的NSTableView中删除所有项目?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)