Привязка Valueurl к большим массивам вызывает вялый пользовательский интерфейс - PullRequest
0 голосов
/ 30 марта 2010

У меня большой набор данных (около 3500 объектов), который возвращается с удаленного сервера по HTTP.В настоящее время данные представлены в NSCollectionView.Одним из аспектов данных является пакет путей к серверу для небольшого изображения, представляющего данные (представьте миниатюру для простоты).

Привязки работают фантастически для данных, которые уже возвращены, и связывают изображение черезПривязка valueurl легко сделать.Тем не менее, пользовательский интерфейс очень вялый при прокрутке набора данных - что заставляет меня думать, что NSCollectionView извлекает все данные изображения, а не только данные изображения, используемые для отображения просматриваемых в настоящее время изображений.

У меня сложилось впечатление, что элементы управления Какао достаточно умны, чтобы извлекать данные только для той информации, которая фактически выводится в пользовательский интерфейс посредством отложенной загрузки.Это, конечно, похоже на случай с NSTableView - но я мог бы ошибиться в этой мысли.

Должно ли привязывание valueurl действовать лениво и, более того, должно ли оно действовать лениво в NSCollectionView?

Я мог бы создать механизм кэширования (на самом деле у меня уже есть такая вещь для другого приложения - см. Мой пост здесь, если вы заинтересованы Заполнение NSImage данными из асинхронного NSURLConnection ), но я действительно не понимаюЯ не хочу идти по этому пути, если мне не нужно это для конкретной реализации, поскольку пользователь потенциально может часто менять наборы данных и может захотеть только небольшие подмножества данных.

Любые предложенные подходы?

Спасибо!

Обновление

После еще одного тестирования кажется, что проблема возникает из-за действия прокрутки набора данных, при котором запрашивается каждое изображениес сервера.Как только все изображения были переданы в наборе данных, реакция очень быстрая.

Итак, вопрос ... есть ли способ отключить выборку значений во время прокрутки и включить ее снова, когда прокрутка закончится?

1 Ответ

0 голосов
/ 03 апреля 2010

Мое решение состоит в том, чтобы использовать собственный механизм кэширования, подобный тому, который я уже использую для другого приложения. Проблема проявляется в том, что при прокрутке прошлых изображений, которые еще не были загружены, элемент управления запускается и выбирает еще не загруженные файлы.

После загрузки изображения становятся доступными локально, поэтому скорость прокрутки нормализуется. Решение состоит в том, чтобы проверить, доступно ли изображение локально, и представить альтернативное изображение пакета приложения, пока изображение загружается в фоновом режиме. Как только изображение будет загружено, обновите модель с изображением, заменив образ заглушки, полученный из комплекта.

Это оставляет пользовательский интерфейс в очень отзывчивом состоянии, дает пользователю возможность взаимодействовать и позволяет настраивать фоновое управление изображениями.

Конечно, было бы неплохо, если бы Какао идентифицировал все это для меня, но тогда что мне делать? : -)

...