我遇到的情况是我使用来自外部来源的UITableView
在NSJSONSerialization
中展示数据。如果设备处于离线模式,我还必须显示此数据。这样做的最佳方法是什么?我是否需要内部数据库来存储数据,检查无线网络以及是否不可用存在本地数据?
感谢您提供的任何帮助或教程。
答案 0 :(得分:2)
是的。你可以让本地数据库做那件事。
您可以查看wifi状态。如果网络连接可用,则显示来自外部源的显示数据,如果网络连接不可用,则显示来自本地数据库的显示数据。
答案 1 :(得分:2)
我对我正在处理的应用程序有类似的要求。我从parse.com(远程对象)中提取数据并将数据放入核心数据(本地对象)。在呈现表格视图时,我在后台运行parse.com查询,该查询会提取数据并将其放入核心数据中。表视图使用NSFetchedResultsController
,因此当核心数据(本地)对象发生更改时,表视图会在检索数据时更新。如果离线,则不会检索任何内容,因此表视图不会更新,而是呈现对象的上次更新。
答案 2 :(得分:1)
当您在线时从外部源检索数据时,将其存储在本地。 下次启动您的应用时:
数据可以存储在plist
,database file
或text file
中。
答案 3 :(得分:0)
您可以使用 CoreData数据库,即每次连接时都更新数据。如果无法连接,只需显示旧数据即可。
如何使用以及如何检查WiFi连接SO提供的内容不仅仅是内容;)
答案 4 :(得分:0)
如果数据不太多,您可以将数据存储在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];
}
}