2013-06-09 4 views
5

Я пытаюсь получить данные из какого-либо места и сохранить его в NSMutableArray пользовательских объектах, содержащих эти данные и информацию.Импорт, отображение и кеширование больших данных

Каждый раз, когда пользователь открывает приложение, те же данные загружаются из источника и преобразуются в мой прекрасный массив с пользовательскими объектами. Это занимает много времени (~ 10-20 с) и делает приложение глупым. Так что я пытался получить данные и отобразить его как в this link

То, что я пытался:

  • сохранить массив пользовательских объектов в файл и загрузить этот файл на следующем запуске приложения (если он найден) без необходимо снова создать пользовательский объект с нуля.
  • декодирование пользовательского объекта & декодирование занимает много времени при тестировании. Даже если вы сохраните его в NSUserDefault.

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

Если кто-нибудь может сделать это sample более понятным для меня, я буду благодарен.

+0

Используете ли вы основные данные? Откуда берутся ваши большие данные? Нужно ли импортировать его каждый раз, когда пользователь запускает приложение? –

+0

, скажем, я пытаюсь получить все события из собственного календаря или получить все контакты при запуске приложения, а затем заполнить массив пользовательскими объектами, содержащими детали контактов или событий ??? – Omarj

+0

@AmyWorrall, как я сказал раньше, если я хочу сохранить его в базу данных, нужно закодировать и декодировать, и это занимает время, когда массив содержит более 3-5 тыс. Записей? – Omarj

ответ

0

Thx все :)

Я нашел простой tutorial что объяснить некоторые части образца кода "fetchedResultsController".

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

2

На мой взгляд, у вас есть только два разумных варианта: 1) очевидным является использование хранилища баз данных и данных ядра для управления вашими объектами. 2) если вы не хотите использовать Core Data, вы можете хранить каждый из своих пользовательских объектов отдельно, чтобы вы могли их загружать партиями.

Если вы хотите пойти на второй вариант, вы можете:

1) Реализовать протокол NSCoding на пользовательском объекте. (это просто код шаблона, очень простой) 2) После того, как вы загрузили данные, вы можете асинхронно сохранять их на диск (таким образом вы не будете блокировать пользовательский интерфейс). 3) Когда приложение запустится, вы можете загрузить партию своих объектов (например, 20, учитывая, что вы будете показывать только ~ 10 в данной точке). Затем, когда пользователь прокручивает ваш контент, вы можете асинхронно загружать его больше в одни и те же фрагменты, чтобы они были готовы к отображению при необходимости.

Это должно значительно повысить производительность вашего приложения. Если вы используете Core Data, вместо этого вы можете использовать аналогичное поведение, установив свойство - [NSFetchRequest fetchBatchSize]. Это позволит автоматически получать данные в партиях.

0

Я рекомендую вам очень простое решение, которое я использовал много раз и очень эффективно.

  1. Скачать видео на файловой системе, если загрузить преуспеваем затем записать файл
  2. путь к SQLite следующей проверки времени, если существует файл с таким же именем или же идентификатором
  3. в SQLite файл тоже Если да, то воспроизвести видео с SQLite
  4. в противном случае перейдите к шагу 1.

Для этого решения вам необходимо создать новый класс менеджера, который будет следить за тем, откуда вы должны извлекать данные.

Смежные вопросы