2010-08-11 130 views
4

我有一个相当简单的iPhone应用程序,它将一组UITableView结果下载到它的模型类中,并设置了一个视图控制器来观察这些更改using KVO如何合并KVO更改?

该系统运行良好(远比到处飞散更新代码更好),只是当我得到的结果,我将它们添加到备份NSMutableArray的一个接一个。这会触发许多KVO通知,以一种看起来很奇怪的方式摇动我的行动画。有没有办法合并某些KVO通知,以便所有更改都可以一次发生,从而提供单个索引集的单个KVO通知?

另外,如果我尝试呼叫-addObjectsFromArray以批处理方式添加我的新结果,必需的KVO通知从不发送,因此不能是观察到的方法之一,对不对?自己照顾这个功能会更好吗?通过调用will/didChangeValueForKey来调用我的更改并生成适当的索引集?

回答

3

我有完全相同的问题。我没有一个妥善的解决办法还没有,但你会发现这个页面的KVO programming guide的一些答案:

您可以实现这些方法来severals对象添加一次到你的数组:

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

希望这有助于文森特。

+0

哈,这不是我要的,但它是我需要完全的!谢谢! 当我收到一个新的数据集,我只是将它添加到我的支持NSMutableArray使用该方法(在本例中,“视频”是一个NSArray与新的数据): '[self insertItems:videos atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0,[视频计数])]];' – 2010-08-19 00:52:34

+0

当前链接文档:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/SearchImplementation.html#//apple_ref/DOC/UID/20000955-CJBBBFFA – Demitri 2013-12-22 15:03:13

1

关于你的第二个问题,关于使用-addObjectsFromArray:这种方法确实不会触发KVO通知(对于我来说,有问题的方法是​​)。此外,或作为替代,以实现array accessors,你可以做到以下几点:

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