Как отобразить данные, если устройство не подключено к сети?
У меня есть ситуация, когда я представляю данные в 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];
}
}