Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 核心数据混乱_Objective C_Macos_Core Data - Fatal编程技术网

Objective c 核心数据混乱

Objective c 核心数据混乱,objective-c,macos,core-data,Objective C,Macos,Core Data,所以我对核心数据是新手,我读到的每一篇文章都说要使用它——如果你使用SQLite,你就是一个邪恶的坏人。但我对一些简单的事情迷茫了。我有一堆数据将用于设置NSCollectionView,这在SQLite中相对简单,但我不想成为一个邪恶的坏人。有没有一个我错过的简单教程?我希望看到一个基于SQL数据库的应用程序示例,以及与核心数据相同的东西 这是SQL中的一个表结构,这是核心数据中的等价物 这是SQL中的插入脚本,这是核心数据中的等效脚本 这是一个带有JOIN和一些WHERE语句的SELECT

所以我对核心数据是新手,我读到的每一篇文章都说要使用它——如果你使用SQLite,你就是一个邪恶的坏人。但我对一些简单的事情迷茫了。我有一堆数据将用于设置
NSCollectionView
,这在SQLite中相对简单,但我不想成为一个邪恶的坏人。有没有一个我错过的简单教程?我希望看到一个基于SQL数据库的应用程序示例,以及与核心数据相同的东西

  • 这是SQL中的一个表结构,这是核心数据中的等价物
  • 这是SQL中的插入脚本,这是核心数据中的等效脚本
  • 这是一个带有JOIN和一些WHERE语句的SELECT,这是核心数据中的等效项
甚至是一些我不懂的小事

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

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

关于您要求在两种方式实现的同一个应用程序之间逐行比较的问题,这听起来是您编写一个应用程序的绝佳学习机会。(我教你开始iOS编程。你要的应用程序可能非常简单。你可能可以在一个周末内编写两个版本。我很乐意回顾你的工作并评论你描述差异的博客文章。在你的情况下,你可以为在这两种技术之间做出选择的其他人做出杰出的贡献。)s、 )

你的问题:

下面是SQL中的表结构,下面是 核心数据中的等效

模式的描述不同,但基本相似。也就是说,SQL模式可能不适合CD和/或UI应用程序使用,反之亦然

这是SQL中的插入脚本,这是核心数据中的等效脚本

苹果和其他公司有很多例子告诉你如何插入新实体。你不明白的是什么

这是一个带有JOIN和一些WHERE语句的SELECT,下面是 核心数据中的等效

CD中的谓词语言不同于SQL。因此,您将以不同的方式进行查询。特别是,CD是一种几乎“纯”的集合论方法来组织数据。您可以使用回迁来为“查询”设定种子,并设置操作来优化它。除此之外,我需要向您介绍许多关于CD及其谓词语言的书籍中的一本

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

CD和其他数据库系统一样依赖于文件。您可以在包中提供它,并在需要修改时将其复制到您的文档目录(在iOS上)

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

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

更新应用程序后,我需要做什么来更新核心数据 文件是否在我的包之外

我不知道你在问什么?如果在不同版本之间更新模式,就像使用SQLite一样,则需要将数据库迁移到新模式。CD提供了一些非常适合添加迁移的工具

祝你的选择好运


Andrew

关于“邪恶的坏人”这一点,这意味着如果您想直接使用SQLite,不要尝试使用CoreData作为SQLite的前端。SQLite在CoreData内部使用这一事实是一个实现细节,试图直接与之交互可能会产生意想不到的后果。(我曾经在一个使用CoreData存储的大型Cocoa应用程序上工作。)@bneely-我认为我根本不应该使用SQLite,即使没有核心数据,我也应该只在新的应用程序中使用核心数据。另一方面,我正在阅读我应该使用SQL脚本来预填充后端核心数据数据库,因为您可以在脚本构建阶段运行它来预填充后端核心数据。所以我很困惑。我宁愿不使用SQL,但我不知道如何在核心数据中做哪怕是很小的事情。你可以通过编程预先填充数据。这还允许您切换底层数据存储,而不会影响应用程序。这里有一个很好的教程:如果适合您的目的,直接使用SQLite绝对没有错。这里有一个真实的例子:就我个人而言,当我不再考虑数据库,而是开始考虑我需要在应用程序中持久化的对象时,我发现核心数据更容易理解。我知道这听起来没什么帮助,但我甚至没有考虑当我使用核心数据时底层数据库会是什么样子(嗯,可能有一点)。