【问题标题】:Core Data Confusion核心数据混乱
【发布时间】:2012-02-12 22:47:40
【问题描述】:

所以我是 Core Data 的新手,我读到的所有内容都说要使用它 - 如果你使用 SQLite,你就是一个邪恶的坏人。但我迷失在一些简单的事情上。我有一堆数据将用于设置NSCollectionView,这在 SQLite 中相对简单,但我不想成为一个邪恶的坏人。我缺少一个简单的教程吗?我很想看到一个基于 SQL 数据库的示例应用程序以及与核心数据相同的东西。

  • 这里是 SQL 中的表结构,这里是核心数据中的等价物...
  • 这是 SQL 中的 INSERT 脚本,这是核心数据中的等效脚本...
  • 这是一个带有 JOIN 和几个 WHERE 语句的 SELECT,这是核心数据中的等价物...

连小事都看不懂。

  • 如何提供预填充的核心数据系统
  • 核心数据文件存放在哪里?像我的 SQLite 数据库一样在捆绑包中?
  • 更新应用程序后,如果核心数据文件位于我的捆绑包之外,我需要做什么来更新它们?

【问题讨论】:

  • 关于“邪恶的坏人”位,这意味着如果您想直接使用 SQLite,请不要尝试使用 CoreData 作为 SQLite 的前端。在 CoreData 内部使用 SQLite 的事实是一个实现细节,尝试直接与其交互可能会产生意想不到的后果。 (我曾经开发过一个使用 CoreData 进行存储的大型 Cocoa 应用程序。)
  • @bneely - 我读到我根本不应该使用 SQLite,即使没有核心数据,我也应该只在新应用程序中使用核心数据。另一方面,我正在阅读我应该使用 SQL 脚本来预填充后端核心数据数据库,因为您可以在脚本构建阶段运行它来预填充核心数据后端。所以我很困惑。我宁愿根本不使用 SQL,但我什至不知道如何做核心数据中的小事。
  • 您可以通过编程方式预先填充数据。这也允许您在不影响您的应用程序的情况下切换底层数据存储。这是一个很好的教程:raywenderlich.com/934/core-data-tutorial-getting-started
  • 如果适合您的目的,直接使用 SQLite 绝对没有问题。这是一个真实的例子:inessential.com/2010/02/26/on_switching_away_from_core_data 就我个人而言,当我不再考虑数据库并开始考虑我需要在我的应用程序中持久化的对象时,我发现 Core Data 更容易理解。我知道这听起来无济于事,但我什至没有想过当我使用 Core Data 时底层数据库会是什么样子(嗯,也许有点)。

标签: objective-c macos core-data


【解决方案1】:

贾斯汀808,

没有人因为不使用 CD 而成为“邪恶的坏人”。如果你更喜欢使用 SQLite,那就去吧。它被许多应用程序使用。它是一个框架。如果 SQLite 是您习惯的技术,那么请使用 SQLite。也就是说,CD 是 Apple 鼓励在其平台上构建丰富、持久的模型应用程序的途径。它们没有为纯 SQL 社区提供很多工具,但为 CD 应用程序提供了非常丰富的工具集。我试图在这里回答技术问题:Core Data VS Sqlite or FMDB…?

关于您要求以两种方式实现的同一应用程序之间的逐行比较,这听起来是您编写应用程序的绝佳学习机会。 (我教初级 iOS 编程。您要求的应用程序可能非常简单。您可能可以在一个周末编写两个版本。我很乐意审查您的工作并批评您描述差异的博客文章。您可以制作一个对在您的情况下尝试在这两种技术之间进行选择的其他人做出了出色的贡献。)

您的问题:

类似于这里的东西是 SQL 中的表结构,这里是 核心数据等价...

模式描述不同,但基本相似。也就是说,SQL 模式可能不会被调整为供 CD 和/或 UI 应用程序使用,反之亦然。

这是 SQL 中的 INSERT 脚本,这是核心数据中的等价物...

Apple 和其他公司提供了大量示例来告诉您如何插入新实体。你有什么不明白的?

这是一个带有 JOIN 和几个 WHERE 语句的 SELECT,这里是 核心数据等价...

CD 中的谓词语言与 SQL 不同。因此,您将以不同的方式查询事物。特别是,CD 几乎是一种组织数据的“纯”集合论方法。您使用 fetches 来播种您的“查询”并设置操作以优化它。除此之外,我需要引导您阅读有关 CD 及其谓词语言的众多书籍之一。

如何提供预填充的核心数据系统

CD 依赖于一个文件,就像所有其他数据库系统一样。你在你的包中提供它并在你需要改变它时将它复制到你的文档目录中(在 iOS 上)。

核心数据文件存放在哪里?在像我的 SQLite 一样的包中 数据库会吗?

是的,他们有。如果您使用带有 SQLite 后备存储的 CD,那么它只是一个 SQLite DB 文件。 (如果您允许 CD 在文件系统中存储大型 BLOB,则存在一个特殊问题。)

随着应用程序的更新,我必须做些什么来更新核心数据 文件是否位于我的捆绑包之外?

我不确定你在这里问什么?如果您在版本之间更新架构,就像使用 SQLite 一样,您需要将数据库迁移到新架构。 CD 提供了一些非常适用于附加迁移的工具。

祝你选择好运。

安德鲁

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2013-10-25
    • 2015-07-20
    相关资源
    最近更新 更多