Как отобразить данные, если устройство не подключено к сети?

У меня есть ситуация, когда я представляю данные в UITableView с помощью NSJSONSerialization из внешнего источника. Я также должен показать эти данные, если устройство находится в автономном режиме. Каков наилучший подход к этому? Нужна ли мне внутренняя база данных для хранения данных, проверки Wi-Fi и, если она недоступна, локальных данных?

спасибо за любую помощь или учебники, которые вы можете знать.

5 ответов

Решение

У меня есть аналогичное требование для приложения, над которым я работаю. Я извлекаю данные с parse.com (удаленные объекты) и помещаю их в базовые данные (локальные объекты). При представлении табличного представления я запускаю запрос parse.com в фоновом режиме, который извлекает данные и помещает их в основные данные. Использование табличных представлений NSFetchedResultsController поэтому, когда происходят изменения в объектах базовых данных (локальных), представление таблицы обновляется по мере извлечения данных. В автономном режиме ничего не извлекается, поэтому табличное представление не обновляется, а представляет последнее обновление объектов.

Да. Вы можете сделать локальную базу данных, чтобы сделать это.

Вы можете проверить статус Wi-Fi. Если сетевое соединение доступно, то отображать данные из внешнего источника, и если сетевое соединение недоступно, то отображать данные из локальной базы данных.

Когда вы извлекаете данные из внешнего источника, когда вы находитесь в Интернете, храните их локально. В следующий раз, когда ваше приложение будет запущено:

  • Проверьте подключение к сети
  • Если сетевое соединение доступно, восстановите данные и переписайте старый контент
  • Если сетевое соединение недоступно, используйте локально сохраненные данные

Данные могут быть сохранены в plist, database file или как text file,

Вы можете использовать базу данных CoreData, т.е. обновлять данные при каждом подключении. Если вы не можете подключиться, просто показать старые данные.

Как использовать и как проверять WiFi соединение. SO предлагает больше, чем нужно;)

Вы можете хранить данные в plist, если их не слишком много.

-(void)Writetoplist:(NSMutableDictionary*)LoginDetails

{

 {
    //////// This is used to delete the plist file if exist //////
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentsDirectory = [paths objectAtIndex:0];
plistPath = [documentsDirectory stringByAppendingPathComponent:@"LoginDetails.plist"];

 NSError *error;
  if(![[NSFileManager defaultManager] removeItemAtPath:plistPath error:&error])
        {
            //TODO: Handle/Log error
        }

        /// to write the SP Details in plist file
        paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        documentsDirectory = [paths objectAtIndex:0];
        // get the path to our plist ("Documents/foo.plist")
        plistPath = [documentsDirectory stringByAppendingPathComponent:@"LoginDetails.plist"];
        [LoginDetails writeToFile:plistPath atomically:YES];
       }

}

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