Как правильно заполнить UITableView асинхронным контентом, который нужно отсортировать
У меня есть куча файлов разных размеров (>100), хранящихся в iCloud. у меня есть NSMetadataQuery
который возвращает эти файлы. Они сообщаются в мое приложение от NSMetadataQuery
Объект в случайном порядке.
Я открываю их и извлекаю пару строк, которые затем сортируются и отображаются в UITableView
,
Я попробовал два подхода:
A) загрузка каждого файла, сортировка массива файлов информации и вызов reloadData
на UITableView
каждый раз. и B) ожидание загрузки всех файлов, затем сортировка "полного" массива и затем вызов reloadData
один раз.
Вариант B, очевидно, лучше, но в основном пользователю требуется столько же времени, чтобы увидеть результаты. Как это сделать лучше всего?
Нужно ли мне извлекать данные, которые я отображаю в UITableView
в другой файл (например, PLIST), чтобы я мог загрузить это быстрее и отображать его, пока фактические данные загружаются в фоновом режиме? Или мне нужно в основном расширить реализацию A, отслеживая массив и затем вызывая reloadRowsAtIndexPaths:
для каждой строки, которая впоследствии изменяется из-за сортировки?
Какова лучшая практика для этого сценария?
Спасибо
1 ответ
С точки зрения пользователя, чем быстрее, тем лучше, а видеть что-то, даже неполное, лучше, чем ничего не видеть. Так:
- Если вы можете поддерживать индексный файл со списком этой информации, используйте ее для отображения и загружайте только то, что вам нужно (например, вашу идею Plist, но, вероятно, она хранится в iCloud, возможно, в хранилище ключей / значений)
- Если вам нужно загрузить информацию о файле, покажите пользователю индикатор активности, чтобы он знал, что вы все еще работаете, и добавляйте элементы в пользовательский интерфейс по мере их получения (ваш вариант A)
Изменение от reloadData
в reloadRowsAtIndexPaths:
делает для лучшей анимации, поэтому приятно иметь, но не обязательно и не делает вещи быстрее.