如何在 iOS 上本地缓存 JSON Web 响应 - 目标 c

Posted

技术标签:

【中文标题】如何在 iOS 上本地缓存 JSON Web 响应 - 目标 c【英文标题】:How to cache JSON web response locally on iOS - objective c 【发布时间】:2018-03-03 17:31:32 【问题描述】:

我正在为 Web 后端构建一个移动 ios 应用程序。我使用以下代码检索 JSON 响应:

NSError *error;
NSString *url_string = [NSString stringWithFormat: @"https://myURL"];
NSData *data = [NSData dataWithContentsOfURL: [NSURL URLWithString:url_string]];
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

在本地存储这些数据以便在互联网连接不可用时使用本地数据库的最佳/最简单方法是什么?目的是在启动应用程序时检查网络连接。如果连接可用,则获取 JSON 响应,解析并更新本地副本,如果连接不可用,则从本地存储中解析数据。

提前致谢。

【问题讨论】:

“存储这些数据”与“本地数据库”有什么关系?我在此要求中没有看到任何涉及任何类型数据库的内容。 【参考方案1】:

如果您希望缓存 JSON 数据以便仍然可以离线使用,我会将 JSON 字典(或数据)写入您应用沙箱中的文件。 “应用程序支持”文件夹的子文件夹将是一个好地方。在这种情况下,您不想使用 Caches 文件夹,因为当您需要离线文件时,iOS 可能会清除这些文件。

诀窍是将给定的 URL 映射到文件名。您需要此映射来保存给定 URL 的文件以及稍后在离线时加载文件。您应该能够将 URL 转换为有用的文件名,只需将所有 / 字符转换为其他字符,例如下划线。

您可能不希望在用户备份他们的 iOS 设备时备份这些文件,因此请务必使用“不备份”属性标记这些文件。现有许多问题都涉及该主题。

【讨论】:

【参考方案2】:

最好的方法是 CoreData 和 最简单的方法是 NSUserDefaults

NSUserDefaults Class Reference

[[NSUserDefaults standardUserDefaults] setObject: jsonDict forKey:@"dictionaryKey"];
 //...
 NSDictionary * myDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"dictionaryKey"];

【讨论】:

你有什么好的参考资料来实现CoreData的objective-c实现吗?我之前搜索过,但只找到了对于简单的 JSON 存储来说似乎过于复杂的示例。 这个你试过了吗:appcoda.com/introduction-to-core-data 不要使用NSUserDefaults。在那里使用的数据太多了。 Core Data 也不一定是最好的方法。 @rmaddy 你有其他选择吗? 哦,天哪!太粗鲁了!

以上是关于如何在 iOS 上本地缓存 JSON Web 响应 - 目标 c的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 7 中解析从 .NET Web 服务收到的 JSON 响应

如何缓存来自 Web 服务器的 okHTTP 响应?

iOS 检索 Web 响应数据后如何从 JSON 中检索值

Web 开发:localStorage 与缓存 HTTP

如何在 Ios 中解析 Web 服务的响应?

使用 IOS、PHP、REST API、JSON 连接到数据库的 Web 服务