Ответ 1
В вашем распоряжении уже много инструментов.
NSURLCache
Все ваши запросы уже сохранены в NSURLCache
в NSURLSessionConfiguration
на NSURLSession
, хранящемся внутри sharedInstance
Alamofire Manager
. Эти сохраненные запросы уже соответствуют всем правилам политики кеширования, предоставляемым серверами, на которые вы нажимаете. Вы можете контролировать поведение кэширования, установив requestCachePolicy
на свой собственный NSURLSessionConfiguration. Я также предлагаю вам прочитать эту потрясающую статью NSHipster, в которой вы можете прочитать все NSURLCache и как ее контролировать.
Создание пользовательских объектов
Manager
описано в текущем документе AlaMofire .
Загрузка JSON на диск
Вы также можете загрузить JSON прямо на диск с помощью Alamofire.download
вместо Alamofire.request
. Это загрузит полезную нагрузку в fileURL
, который вы предоставите в закрытии destination
. Это даст вам полный контроль над кешированием файла после этого момента. После этого вам понадобится создать свою собственную политику кэширования в этих файлах, если вы захотите следовать правилам кэширования заголовков, предоставленным сервером.
Отображение таблицы заполнения
Как только вы загрузите свои данные на диск, вам нужно загрузить его в блок NSData
и проанализировать его в JSON, чтобы заполнить таблицу. Это должно быть довольно прямолинейно. Вам необходимо указать пункт назначения NSURL
, который вы указали в Alamofire, когда вы начали загрузку. Затем загрузите данные файла в кадр NSData. Наконец, используйте NSJSONSerialization для преобразования объекта NSData
в JSON AnyObject
, который может быть проанализирован в объектах модели, чтобы заполнить представление таблицы.
Очевидно, что вы не "имеете" для анализа JSON в объектах модели, но это помогает защитить представление таблицы от искаженных данных JSON.
Сохранение JSON для автономного использования
Если вы придерживаетесь такого подхода, вам нужно будет отслеживать даты истечения срока действия кеша в виде CoreData или SQLite. Это можно сделать либо путем кэширования путей к файлам JSON на диске, либо для хранения объектов модели непосредственно в CoreData или SQLite. Это может стать довольно сложным, и я бы не рекомендовал этот подход, если вы абсолютно не хотите кэшировать свои объекты модели.
Автономное использование
Как правило, если вам нужно кэшировать данные для автономного использования, вы хотите сохранить объекты модели в чем-то вроде CoreData. Вы должны использовать метод Alamofire request
в сочетании с сериализатором responseJSON
для анализа данных в JSON. Затем вы конвертируете JSON в объекты модели. Оттуда вы сохраните объекты модели в CoreData, а затем, наконец, заполните свой вид таблицы объектами модели.
Самое приятное в этом подходе заключается в том, что у вас есть все ваши объекты модели, кэшированные в том случае, когда ваше представление таблицы доступно, когда устройство находится в автономном режиме. Соединив этот проект с запросами к вашему NSURLCache
, чтобы узнать, кэшируется ли ваш запрос, вы избегаете ненужных вызовов серверов и логики разбора, когда у вас уже созданы ваши объекты модели.
Учитывая обновления исходного вопроса, я бы рекомендовал этот подход.