Привязка Valueurl к большим массивам вызывает вялый пользовательский интерфейс
У меня большой набор данных (около 3500 объектов), который возвращается с удаленного сервера через HTTP. В настоящее время данные представлены в NSCollectionView. Одним из аспектов данных является пакет путей к серверу для небольшого изображения, представляющего данные (для простоты представьте миниатюру).
Привязки работают фантастически для данных, которые уже возвращены, и привязка изображения через привязку valueurl легко сделать. Тем не менее, пользовательский интерфейс очень вялый при прокрутке набора данных - что заставляет меня думать, что NSCollectionView
извлекает все данные изображения, а не только данные изображения, используемые для отображения просматриваемых в данный момент изображений.
У меня сложилось впечатление, что элементы управления Какао достаточно умны, чтобы извлекать данные только для той информации, которая фактически выводится в пользовательский интерфейс посредством отложенной загрузки. Это, конечно, похоже на случай с NSTableView
- но я мог бы ошибиться в этой мысли.
Должен ли обязательный действовать лениво и, более того, должен ли он действовать лениво в NSCollectionView
?
Я мог бы создать механизм кэширования (на самом деле у меня уже есть такая вещь для другого приложения - см. Мой пост здесь, если вы заинтересованы в заполнении NSImage данными из асинхронного NSURLConnection), но я действительно не хочу идти по этому пути, если Мне не нужно для этой конкретной реализации, поскольку пользователь может часто менять наборы данных и может хотеть только небольшие подмножества данных.
Любые предлагаемые подходы?
Спасибо!
Обновить
После еще одного тестирования кажется, что проблема возникает из-за того, что действие прокрутки набора данных вызывает запрос каждого изображения с сервера. Как только все изображения были переданы в наборе данных, реакция очень быстрая.
Итак, вопрос... есть ли способ отключить выборку значений во время прокрутки и включить ее снова, когда прокрутка закончится?
1 ответ
Мое решение состоит в том, чтобы использовать собственный механизм кэширования, подобный тому, который я уже использую для другого приложения. Проблема проявляется в том, что когда вы прокручиваете изображения, которые еще не были загружены, элемент управления запускается и выбирает еще не загруженные файлы.
После загрузки изображения становятся доступными локально, поэтому скорость прокрутки нормализуется. Решение состоит в том, чтобы проверить, доступно ли изображение локально, и представить альтернативное изображение пакета приложения, пока изображение загружается в фоновом режиме. Как только изображение было загружено, обновите модель с изображением, заменяющим изображение заглушки, которое пришло из пакета.
Это оставляет пользовательский интерфейс в очень отзывчивом состоянии, дает пользователю возможность взаимодействовать и позволяет настраивать фоновое управление изображениями.
Конечно, было бы неплохо, если бы Cocoa определила все это для меня, но что мне тогда делать?:-)