如何合并KVO变化?

时间:2010-08-11 06:22:26

标签: iphone cocoa-touch uitableview

我有一个相当简单的iPhone应用程序,它将一组UITableView结果下载到它的模型类中,还有一个视图控制器,用于观察这些变化using KVO

这个系统运行良好(比散布更新代码更好),除了当我得到结果时,我将它们逐个添加到支持NSMutableArray。这会激发许多KVO通知,以一种看似奇怪的方式错开我的行动画。有没有办法合并某些KVO通知,以便所有更改都可以立即发生,从而提供单个索引集的单个KVO通知?

或者,如果我尝试调用-addObjectsFromArray以批量方式添加新结果,则永远不会发送必要的KVO通知,因此不能是观察到的方法之一,对吧?通过使用will / didChangeValueForKey调用包装我的更改并生成相应的索引集来自己处理此功能会更好吗?

2 个答案:

答案 0 :(得分:3)

我遇到了完全相同的问题。我还没有一个合适的解决方案,但你可以在KVO programming guide的这个页面上找到一些答案:

您可以实现这些方法,一次将多个对象添加到数组中:

-insert<Key>:atIndexes: and -remove<Key>AtIndexes
(corresponding to the NSMutableArrayinsertObjects:atIndexes: and removeObjectsAtIndexes: methods)

希望这有帮助, 文森特。

答案 1 :(得分:1)

关于你的第二个问题,关于使用-addObjectsFromArray:这个方法确实不会触发KVO通知(对我来说,有问题的方法是removeAllObjects)。此外,或者作为替代,实施array accessors,您可以执行以下操作:

[[self mutableArrayValueForKey:@"key"] removeAllObjects];