使用存储的 JSON 而不是 Core Data
Posted
技术标签:
【中文标题】使用存储的 JSON 而不是 Core Data【英文标题】:use stored JSON instead of Core Data 【发布时间】:2015-09-29 12:03:12 【问题描述】:有很多教程描述了如何从 Web 获取 JSON 对象并将它们映射到 Core Data。
我目前正在开发一个 ios(后来也包括 android)应用程序,该应用程序从 Web 加载 json 对象并将它们显示给用户。在我看来,在这种情况下,与 Core Data 之间的所有映射都是开销,直接保存 JSON 对象并将它们用作应用程序中的“缓存”会容易得多。是否有库/文档化的方法来实现获取 json 对象、将它们保存在本地并使用预定义的标识符获取它们?
我很想获取例如10 个对象,将它们展示给用户并在本地保存数据。下次用户在该列表上时,将显示本地数据,并在后台再次获取 json 文件以保持最新状态。我想这是一个常见的用例,但我没有找到任何教程/框架可以完全实现这一点。
【问题讨论】:
我知道这不完全是你的问题,但看看realm.io,它可能是一个不错的选择。真正易于使用和跨平台。而且速度很快。 【参考方案1】:您可以简单地使用 NSURLCache 来缓存 http 响应而不是保存 JSON http://nshipster.com/nsurlcache/
【讨论】:
【参考方案2】:有很多方法可以实现这一点。您可以根据数据的复杂性和数量使用文件存储或数据库来实现缓存。如果您正在使用文件,您只需要存储 JSON 响应并在创建活动/片段时加载它。我有时所做的是以字符串的形式将 JSON 响应存储在文件中,然后在活动/片段加载时检索它。下面是一个读写字符串文件的例子:
编写文件:
FileOutputStream outputStream = context.openFileOutput("myfilename",Context.MODE_PRIVATE);
String stringToBeSaved = myJSONObject.toString();
outputStream.write(stringToBeSaved.getBytes());
从文件中读取
FileInputStream inputStream= context.openFileInput("myfilename");
int c;
String temp="";
while( (c = inputStream.read()) != -1)
temp = temp + Character.toString((char)c);
您可以使用以下方法将此字符串转换为 JSONObject:
JSONObject jsonObject = new JSONObject(temp);
或者你可以根据需要使用字符串。
【讨论】:
以上是关于使用存储的 JSON 而不是 Core Data的主要内容,如果未能解决你的问题,请参考以下文章
Core-Data:想要将新的 web xml 内容持久保存到我的数据存储中,而不是替换现有的
使用 Decodable 解码 JSON 嵌套字典并使用 Core Data 存储它
如何切换到将 Core Data 用于简单的 UITableView 而不是 NSArray?
将 JSON 数据插入 Core Data 存储需要很长时间