Как объединить изменения КВО? - PullRequest
4 голосов
/ 11 августа 2010

У меня есть довольно простое приложение для iPhone, которое загружает набор результатов UITableView в свой класс модели, и контроллер представления, настроенный для наблюдения этих изменений с использованием KVO .

Эта система работает хорошо (намного лучше, чем разбросанный код обновления повсюду), за исключением того, что когда я получаю результаты, я добавляю их в резервный NSMutableArray один за другим. Это запускает много уведомлений KVO, ошеломляя мои анимации строк таким образом, что это выглядит странно. Есть ли способ объединить определенные уведомления KVO, чтобы все изменения могли произойти сразу и, таким образом, обеспечить одно уведомление KVO с одним набором индексов?

В качестве альтернативы, если я пытаюсь вызвать -addObjectsFromArray, чтобы добавить мои новые результаты в пакетном режиме, необходимые уведомления KVO никогда не отправляются, так что это не должно быть одним из наблюдаемых методов, верно? Было бы лучше позаботиться об этой функции самостоятельно, обернув мои изменения вызовами will / didChangeValueForKey и сгенерировав соответствующий набор индексов?

Ответы [ 2 ]

3 голосов
/ 16 августа 2010

У меня точно такая же проблема.У меня пока нет правильного решения, но вы можете найти ответы на этой странице руководства по программированию KVO :

Вы можете реализовать эти методы, чтобы добавить несколько объектов одновременно в ваш массив:1005 *

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

Надеюсь, это поможет, Винсент.

1 голос
/ 09 марта 2013

Относительно вашего второго вопроса об использовании -addObjectsFromArray: этот метод действительно не вызывает уведомления KVO (для меня рассматриваемый метод был removeAllObjects). В дополнение или в качестве альтернативы для реализации средств доступа к массиву вы можете сделать следующее:

[[self mutableArrayValueForKey:@"key"] removeAllObjects];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...