2010-08-11 118 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];