1

我有一种情况,我正在UITableView使用NSJSONSerialization来自外部源的数据来呈现数据。如果设备处于离线模式,我还必须显示这些数据。这样做的最佳方法是什么?我是否需要一个内部数据库来存储数据,检查 wifi,如果它不可用,则提供本地数据?

感谢您可能知道的任何帮助或教程。

4

5 回答 5

2

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

于 2013-06-27T12:38:54.687 回答
2

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

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

于 2013-06-27T12:31:42.893 回答
1

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

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

数据可以存储plistdatabase file.text file

于 2013-06-27T12:32:35.947 回答
0

您可以使用CoreData 数据库,即每次连接时更新数据。如果无法连接,只需显示旧数据。

如何使用以及如何检查 WiFi 连接 SO 提供的内容绰绰有余;)

于 2013-06-27T12:32:41.797 回答
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];
       }

}

于 2013-06-27T12:38:37.517 回答