预加载信息的核心数据

Posted

技术标签:

【中文标题】预加载信息的核心数据【英文标题】: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 是否有任何巨大的好处(查看团队成员 - 很少发生添加和删除) 【参考方案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 应用程序中,它会正常工作。

【讨论】:

以上是关于预加载信息的核心数据的主要内容,如果未能解决你的问题,请参考以下文章

使用默认值预加载核心数据表

预加载具有多对多关系的核心数据的最佳实践

如何使用 JSON 预加载一对多核心数据关系

如何使用 swift 3 xcode 8 在核心数据中预加载数据库

JS代理模式实现图片预加载

如何生成 JSON 文件以预加载和导入 coreData?