如果设备没有网络连接,如何显示数据?

时间:2013-06-27 12:26:32

标签: iphone ios nsjsonserialization

我遇到的情况是我使用来自外部来源的UITableViewNSJSONSerialization中展示数据。如果设备处于离线模式,我还必须显示此数据。这样做的最佳方法是什么?我是否需要内部数据库来存储数据,检查无线网络以及是否不可用存在本地数据?

感谢您提供的任何帮助或教程。

5 个答案:

答案 0 :(得分:2)

是的。你可以让本地数据库做那件事。

您可以查看wifi状态。如果网络连接可用,则显示来自外部源的显示数据,如果网络连接不可用,则显示来自本地数据库的显示数据。

答案 1 :(得分:2)

我对我正在处理的应用程序有类似的要求。我从parse.com(远程对象)中提取数据并将数据放入核心数据(本地对象)。在呈现表格视图时,我在后台运行parse.com查询,该查询会提取数据并将其放入核心数据中。表视图使用NSFetchedResultsController,因此当核心数据(本地)对象发生更改时,表视图会在检索数据时更新。如果离线,则不会检索任何内容,因此表视图不会更新,而是呈现对象的上次更新。

答案 2 :(得分:1)

当您在线时从外部源检索数据时,将其存储在本地。 下次启动您的应用时:

  • 检查网络连接
  • 如果网络连接可用,则检索数据并重新写入旧内容
  • 如果网络连接不可用,请使用本地存储的数据

数据可以存储在plistdatabase filetext 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];
       }

}

相关问题