【问题标题】:Core Data for preloaded information预加载信息的核心数据
【发布时间】:2013-05-28 21:21:10
【问题描述】:

我目前正在学习核心数据,我可以看到它对电话簿等应用程序的好处,但是如果您的应用程序要包含预加载的数据,那么核心数据是好的。例如美式橄榄球队的球员。我正在使用 MESASqlite 并手动输入 ino,然后将其复制并粘贴到 xcode 中,以便将所有播放器预加载到我的应用中。

基本上,我听说核心数据不是数据库(根据 Apple 文档),所以我有点困惑。

【问题讨论】:

  • CoreData 不是数据库……当然……iPhone 不是智能手机,Mac 不是个人电脑,iPod 不是 MP3 播放器……玩得很好,Apple。
  • 没错,core-data 不是数据库。然而,iOS 确实包含 SQLite,它是一个数据库。它有一个 C API。如果您更喜欢objective-c API,可以使用各种包装器,例如FMDB。 github.com/ccgus/fmdb
  • @H2CO3:Core Data 不是数据库。 Core Data 是一个对象图管理和持久化框架。 Core Data 支持的一种持久性选项是 SQLite,它是一个数据库。还有其他一些。如果使用 SQLite,强烈建议不要在使用 Core Data 时直接处理数据库。
  • @Tim 当然,概念上的细微差别是不可忽略的。那不是我的意思:)
  • 谢谢大家!在上述应用程序中使用 coredata 是否有任何巨大的好处(查看团队成员 - 很少发生添加和删除)

标签: ios core-data


【解决方案1】:

使用 CoreData 作为只读的预加载数据存储是非常有可能的。事实上,如果数据集很大,CoreData 的故障机制可能对您保持低运行时内存消耗很有利。使用 CoreData 几乎肯定比使用 SQL 从 SQLite 数据库中获取所需的记录子集更容易。 CoreData 还提供了版本控制和模型版本更新的解决方案。

为此,您需要使用 SQLite 后备存储,并且需要编写一个工具来填充初始模型。请注意,虽然使用 SQLite 数据库表编辑器来修改单个字段几乎是可行的,但您绝对不能使用一个来创建或删除行。

就填充初始模型的工具而言,将其作为 MacOSX 控制台或 Cocoa 应用程序并将其作为应用程序构建过程的一部分运行是很有意义的。您将 SQLite 数据库作为二进制资源包含在 iOS 应用程序中。

在 MacOSX 中构建图形编辑工具实际上比在 iOS 中容易得多,因为可可框架提供的许多控件上都有额外的 KVO 绑定 - 例如,在 NSTableView 中。

或者,您可以轻松地从现有格式(例如 CSV 或 XML)转换数据。

【讨论】:

    【解决方案2】:

    我几乎总是将 Core Data 用于预填充或空数据库。如果您必须处理持久数据,您可以使用 .plist 或数据库(主要是 sqlite)文件。不同之处在于,如果使用 .plist 文件,则将数据加载到 NSDictionary 对象中。另一方面,如果你使用 Core Data,持久化的信息会被加载到“托管”对象中,这样更容易使用。使用 Core Data 有几个优势(管理多个上下文、数据模型编辑器、缓存等)

    如果你不熟悉 Core Data,你应该尝试一下

    【讨论】:

    • 感谢 aprunedamtz,不管我的决定如何,我都会去看看。
    • 使用 NSDictionary 的缺点是 i) 您必须一次性加载整个模型并将其保存在内存中。 ii) 生成的字典是弱类型的——因此这会导致使用它的代码要多得多。尽管如此,这可能是阻力最小且易于实施的路径 - 特别是对于小型模型和小型数据集。
    【解决方案3】:

    Core Data 可能不是真正的数据库,但它拥有 SQLite 数据库的许多共同特性。

    是的,Core Data 是一个不错的选择。您通常会使用 SQLite 存储来保存应用程序中的数据。您还可以编写一些代码或桌面应用程序来编辑预加载数据库。然后将预加载数据库复制到 Xcode 项目中。

    如果您已经有了使用 MESASqlite 的解决方案并且一切正常,那么没有特别的理由需要更改。

    【讨论】:

    • 谢谢,这就是我的想法,我对 CoreData 很感兴趣,并认为它可能是一个更好的方法。
    • 如果您想利用对象映射,CoreData 是一个更好的选择,而 SQLite 并没有为您提供开箱即用的功能。
    【解决方案4】:

    基本上,我听说核心数据不是数据库(根据 Apple 文档)所以我有点困惑。

    Core Data 是一个对象持久性框架:您将对象放入存储中,稍后您可以将它们取回。所以它就像一个数据库,它可以使用一个数据库来进行实际的存储,但是如果你从表和行而不是对象图的角度来考虑它,你也许应该考虑自己使用 SQLite。使用对象可以让您构建将数据处理到类中的智能,并且您从数据存储中提取的对象将具有这些行为。

    如果您的应用要包含预加载的数据,那么核心数据是好的。

    当然——它非常适合这样的东西。事实上,编写一个简单的 Mac 程序从其他地方获取数据并使用您为 iOS 应用程序创建的相同模型将其添加到 Core Data 存储区的情况并不少见。您可以将该数据存储与模型一起构建到您的 iOS 应用程序中,它会正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多