【问题标题】:Objective-C best choice for saving dataObjective-C 保存数据的最佳选择
【发布时间】:2011-10-30 15:46:42
【问题描述】:

我目前正在寻找在我的 iPhone 应用程序中保存数据的最佳方式;在应用程序打开和关闭之间将持续存在的数据。我已经研究过使用 NSKeyedArchiver 进行归档,并且成功地使它工作。但是,我注意到如果我尝试保存多个对象,每次保存时它们都会被覆盖。 (基本上,用户将能够创建他/她想要的东西的列表,保存列表,创建更多列表,将它们全部保存,然后能够返回并选择其中任何一个列表以在将来加载日期。)

我听说过 SQLite、Core Data 或使用 .plists 来存储多个数据数组,这些数据会随着时间的推移而持续存在。有人能指出我保存数据的最佳方向吗?谢谢!

【问题讨论】:

    标签: objective-c sqlite core-data plist nskeyedarchiver


    【解决方案1】:

    一旦您克服了最初的学习曲线,Core Data 就非常强大且易于使用。这是一个很好的入门教程 - clicky

    【讨论】:

    • 我已经创建了一个未设置为使用核心数据的项目。在现有项目中设置它是否很难,还是我应该从头开始,选择“使用核心数据”并复制文件?
    【解决方案2】:

    作为 CoreData 的一种简单而强大的替代方案,请查看用于 Objective-C 的 ActiveRecord。 https://github.com/aptiva/activerecord

    【讨论】:

    • 有趣的发现!我还没有看到这个。
    【解决方案3】:

    我会选择 NSKeyedArchiver。听起来问题在于您没有正确组织图表。

    从技术上讲,您有一个列表列表,但您只是保存内部嵌套列表。

    您应该将该列表添加到“超级”列表中,然后将超级列表存档。

    CoreData / SQL 似乎与您描述的有点不同。

    【讨论】:

    • 所以你会建议在存档中提取我所拥有的数组,将新数据附加到末尾,然后重新存档?
    • 这是一种方法。或者您可以随时加载超级列表并根据需要对其进行修改。然后当你保存时,保存整个列表。
    • 现在我正在考虑保存每个包含大约 16 个字符串的可变数组。如果存档数据太大,我是否需要担心内存过载?
    • 它与 SQL 所需的归档大小相同。据我所知,CoreData(即 sqlite)不压缩字符串。即使您有 100 个数组,每个数组有 16 个字符串,每个字符串也可能有 50 个字符。那是 80,000 个字符,或 80kb。 1000 个字符串或 500 个字符 = 800kb。仍然很小且易于管理。
    【解决方案4】:

    你也可以试试这个framework。它非常简单易用。 它基于 ActiveRecord 模式,允许使用迁移、关系、验证等。

    它只使用 sqlite3,没有 CoreData,但你不需要使用原始 sql 或手动创建表。

    只需描述您的iActiveRecord 并享受。

    【讨论】:

      【解决方案5】:

      您想查看 this tutorial by Ray Wenderlich 上的 CoreData 入门。它很简短,涵盖了 CoreData 的基础知识。

      基本上,如果您有少量数据要存储,您只想查看 plist。设置或首选项的简单列表。任何比这更大的东西,它都会特别围绕性能进行分解。 iTunesU 上有一段很棒的视频,LinkedIn 的开发人员在其中描述了他们在 plist 和 CoreData 之间的性能指标。

      存档工作,但存储和检索数据以及将性能挑战置于您的背上将需要大量工作。所以我不会去那里。我会使用 CoreData。它上手非常简单,如果您了解this stack overflow question 中的对象,那么您就知道一切所需。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多