cocoa – 我应该如何从NSArrayController控制的NSTableView中删除所有项目?

cocoa – 我应该如何从NSArrayController控制的NSTableView中删除所有项目?,第1张

概述我正在使用NSArrayController,NSMutableArray和NSTableView来显示我自己的自定义对象的列表(尽管这个问题可能适用于你只是显示一个vanilla NSString对象的列表). 在不同的时间点,我需要清除我的数组并刷新数据源中的数据.但是,仅在我的NSMutableArray对象上调用removeAllObjects不会触发KVO更新,因此屏幕上的列表保持不变. 我正在使用NSArrayController,NSMutableArray和NStableVIEw来显示我自己的自定义对象的列表(尽管这个问题可能适用于你只是显示一个vanilla Nsstring对象的列表).

在不同的时间点,我需要清除我的数组并刷新数据源中的数据.但是,仅在我的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中删除所有项目?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1021763.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存