将 CoreData 与对象一起使用?

Posted

技术标签:

【中文标题】将 CoreData 与对象一起使用?【英文标题】:Using CoreData with an object? 【发布时间】:2010-02-03 13:55:02 【问题描述】:

这是一个初学者的问题:我在 CoreData 上看到的每个教程都侧重于数据库支持的存储。他们都从绘制具有关系和诸如此类的对象模型开始。

但我的应用程序将像一个简单的绘图应用程序,想想 Illustrator light 或 OmniGraffle。我在内存中有一个用于页面的对象,然后是几个用于绘制元素的子对象。您将如何使用 CoreData?

我不需要完成的代码,只需要指针或想法。

谢谢!

【问题讨论】:

Core Data 可以使用数据库作为其持久存储类型之一的事实并不意味着它仅限于数据库类型的应用程序。您可以(并且可能应该)将它用于几乎任何类型的应用程序,因为它使数据建模、迁移和持久化变得非常简单。唯一的缺点是学习曲线相当陡峭。 【参考方案1】:

每个程序设计都从数据模型开始(或应该开始)。数据模型不仅存储程序的数据,还存储数据之间的逻辑关系。数据模型是程序的核心,其他一切都是以某种方式显示数据模型的一个或多个界面。

以绘制多边形的简单绘图程序为例。从逻辑上讲,该程序将从一个文档开始。在核心数据中,这将由数据模型中的文档实体表示,并且可能是 NSManagedObject 子类。反过来,该文档将包含(关系)一页或多页。这些页面也将有一个实体和一个子类。页面将保存有关物理页面的数据,例如页边距、页脚、页眉等。页面还将保存多边形。每个多边形实体子类都将拥有绘制多边形所需的信息,例如顶点的点。

当用户绘制时,控制器层会将命令和屏幕位置转换为数据模型中的数据,然后根据需要再次退出。

使用核心数据构建数据模型有很多优势。

核心数据自动管理难以手动跟踪的非常复杂的逻辑关系。 它创建了一个自动撤消系统 它可以更轻松地在程序的不同部分之间传输数据(在这种情况下为绘图)或导出绘图的子部分。 它将数据与任何特定接口分离。例如,您可以通过编写另一个控制器将绘图输出到 LaTex 或 Flash。 它使编写应用程序脚本变得容易。只需使用数据模型而不是用户界面以编程方式使用脚本界面。

据我了解,Omnigraffle 是基于 Core Data 的,所以如果您想要一个类似 Core Data 的应用程序,绝对是您的不二之选。

【讨论】:

很好的描述!令我惊讶的是,有多少程序员不了解或不知道数据模型是什么。值得指出的是,数据库模式不是数据模型——很多人都会犯这个错误。 我想我犯了同样的错误。谢谢你的解释!【参考方案2】:

无论您使用的是持久存储还是内存存储,Core Data 都需要定义对象图模型。您绝对应该阅读Core Data Programming Guide。

【讨论】:

以上是关于将 CoreData 与对象一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

认识CoreData—初识CoreData

数据导入CoreData期间如何显示progressBar?

NSOutlineView 侧边栏帮助

将 UICollectionView 与 CoreData 和 NSFetchedResultsController 一起使用

是否可以将 group_concat 与 coredata 一起使用?

CoreData:将 MagicalRecord 与 FetchedResultsController 和自定义 sortDescriptor 一起使用