了解iOS Swift中的CoreData

时间:2016-03-19 22:13:36

标签: ios swift core-data realm data-modeling

我正在构建一个应用程序,并试图了解CoreData的概念。我已根据此链接的建议为应用创建了数据模型...

Apple "Define Your Data Model" Link

目前,我只是在本地使用一些测试数据进行开发。这是我创建的示例对象类...

<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /tridrops/tridrops/ver/categories/ was not found on this server.</p>
<hr>
<address>Apache/2.4.9 (Win64) PHP/5.5.12 Server at localhost Port 81</address>
</body>

然后我在本地初始化了一些这些对象,以便在开发过程中使用它们并且工作正常。

我的问题是......

当使用像CoreData或RealmSwift这样的存储时,这种类型的数据模型会不相关吗?我会创建一个全新的数据模型(例如在Realm中)吗?或者这种类型的数据模型能否与其中一个数据库模型很好地配合使用?

最重要的是,现在将构建我的数据模型,并在成为大量代码重构的原因后合并CoreData或RealmSwift?如果是这种情况,那么建议在继续前进之前放弃前端开发并构建整个数据模型吗?

1 个答案:

答案 0 :(得分:0)

Core Data and Realm采用两种截然不同的方法来定义您的架构。

对于Core Data,您需要在Xcode的数据模型编辑器中设计模型,该编辑器为每个版本创建一组xcdatamodel个文件。 然后,您可以使用Xcode内置功能或某些第三方工具mogenerator来生成NSManagedObject实体类。核心数据可以使用lightweight migrations自动推断模式的不同版本之间的映射,但这仅在某些限制内有效。如果您的迁移案例应该更复杂,您可以定义自定义映射模型。

通常使用Realm和RealmSwift,您可以在代码中完全定义模式(和迁移)。您的课程必须从Object继承,您必须定义属性conforming to some rules,以便正确识别它们并自动保留。

但是,一个持久性框架相对于另一个的决定将具有应用程序范围的影响。例如,Core Data和Realm对多线程有不同的要求。虽然理论上可以避免这种情况,如果你完全封装你的持久层并与你的前端只共享代理对象,你将同时放松组件支持的优势(NSFetchedResultsController / RBQFetchedResultsController)并进一步持久性框架可能提供的便利。 (例如,更改通知,自动更新,...)