我有一个相当简单的iPhone应用程序,它将一组UITableView结果下载到它的模型类中,还有一个视图控制器,用于观察这些变化using KVO。
这个系统运行良好(比散布更新代码更好),除了当我得到结果时,我将它们逐个添加到支持NSMutableArray。这会激发许多KVO通知,以一种看似奇怪的方式错开我的行动画。有没有办法合并某些KVO通知,以便所有更改都可以立即发生,从而提供单个索引集的单个KVO通知?
或者,如果我尝试调用-addObjectsFromArray
以批量方式添加新结果,则永远不会发送必要的KVO通知,因此不能是观察到的方法之一,对吧?通过使用will
/ didChangeValueForKey
调用包装我的更改并生成相应的索引集来自己处理此功能会更好吗?
答案 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];