Привязка Valueurl к большим массивам вызывает вялый пользовательский интерфейс

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

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

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

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

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

Любые предлагаемые подходы?

Спасибо!

Обновить

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам