将提要流项目 NSObject 存储在磁盘中或作为 JSON

Posted

技术标签:

【中文标题】将提要流项目 NSObject 存储在磁盘中或作为 JSON【英文标题】:storing feed stream items NSObject in disk or as JSON 【发布时间】:2012-07-14 15:28:05 【问题描述】:

所以我正在实现一个提要/时间线类型的应用程序。基本上,当您最初打开应用程序时,它会进入内存,然后使用该数据立即返回,而在后台它正在从服务器获取更新的数据。问题是,到目前为止,我将响应存储为原始 JSON 文件。现在,当我从服务器以 JSON 形式取回新数据时,基本上我需要将此 JSON 与旧数据附加/合并,然后再将其保存回磁盘。这很痛苦,因为我不知道如何合并两个 JSON?有没有可能,如果可以怎么办?

JSON格式如下:


    "data": 
        "last_updated": 1342277036, 
        "stream": [
            
                "action": 

                    
                , 
                "to": [


                ], 
                "from": [

                ],  
                "timestamp": 1342276421
            , 

 
                "action": 

                    
                , 
                "to": [


                ], 
                "from": [

                ],  
                "timestamp": 1342276421
            , 

 
                "action": 

                    
                , 
                "to": [


                ], 
                "from": [

                ],  
                "timestamp": 1342276421
            , 

如果这不是一个好方法。那么将 NSObject 保存到磁盘而不是原始 JSON 文件更好吗?

【问题讨论】:

【参考方案1】:

您应该使用自己的 ObjC 对象对数据进行建模,而不是合并 JSON 对象。

查看您的 JSON 数据,您的流似乎包含“动作”、到/从和时间。

所以你应该创建一个代表该数据的类。

然后,当您下载 JSON 时,您应该解析它并根据收到的数据创建操作对象。

然后您可以使用诸如 Core Data 之类的框架来处理您的持久性。 Core Data 是一个对象模型图,可以有数据库支持,你可以使用 Core Data 来查询数据库。

这将允许您执行诸如“获取自此时间戳以来的所有操作对象”和“将所有这些新对象保存到数据库”之类的操作。

查看Core Data programming guide。

【讨论】:

是的,我知道 Core Data。我不使用它的原因是因为提要会发生很大变化,所以我不想将它存储在核心数据中 我不确定我是否理解你的推理。 Core Data 是一个非常高效的框架,能够处理变化很大的提要。 那么核心数据存储的 NSObject 是 self 对吗?我实际上有 NSObject 的子类来映射来自这些 JSON 的数据。我有点困惑的是,如果我有 3 个不同的提要流,那么如何将它们存储在核心数据中? 听起来你需要学习一些面向对象的编程原理。您可以创建一个抽象基类,对每个流共有的对象的基本方面进行建模,然后创建基类的子类以实现每个流的特定功能。您可以在 Core Data 中拥有使用每个流特定子类的单独实体。 如果我想走这条路,你能提供一个关于如何附加 JSON 的替代方案吗?

以上是关于将提要流项目 NSObject 存储在磁盘中或作为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Azure VM 使用 D: 盘作为 Windows VM 上的数据驱动器

NSSecureCoding 与钥匙串

MSDN搬运 之 [编写流]

java-IO编程

C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

Android - 将输入流存储在文件中