Как объединить изменения кво?


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

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

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

2 4

2 ответа:

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

Вы можете реализовать эти методы для добавления нескольких объектов сразу в Ваш массив:

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

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

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

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