繁体   English   中英

了解iOS Swift中的CoreData

[英]Understanding CoreData in iOS Swift

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

苹果“定义您的数据模型”链接

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

import UIKit

func ==(lhs: Recipe, rhs: Recipe) -> Bool {
    return lhs.hashValue == rhs.hashValue
}

class Recipe: Hashable {

dynamic var ID : Int = 0
dynamic var recipeName: String = ""
dynamic var recipeDescription:String = ""
dynamic var servings: Int = 0
dynamic var cookTime: Double = 0.0
dynamic var image: String? = ""

var hashValue : Int {
    get {
        return "\(self.ID)".hashValue
    }
}
init?(id: Int, name: String, description: String, servings: Int, cooktime: Double, image: String) {
    self.ID = id
    self.recipeName = name
    self.recipeDescription = description
    self.servings = servings
    self.cookTime = cooktime
    self.image = image

    if id < 0 || name.isEmpty || description.isEmpty || cookTime < 0 || servings < 0 {
        return nil
    }
}
}

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

我的问题是

当需要使用诸如CoreData或RealmSwift之类的存储时,这种类型的数据模型会不相关吗? 我会建立一个全新的数据模型(例如在Realm中)吗? 还是这种数据模型可以与其中一种数据库模型很好地配合使用?

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

核心数据和领域使用两种截然不同的方法来定义模式。

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

通过一般的Realm和此处的RealmSwift,您可以完全在代码中定义架构(和迁移)。 您的类必须从Object继承,并且必须定义符合某些规则的属性,以便正确识别它们并可以将它们自动保留。

但是,一个持久性框架相对于另一个持久性框架的决定将对整个应用程序产生影响。 例如,Core Data和Realm对多线程有不同的要求。 虽然理论上可以规避,如果你完全封装的持久层,并与您分享前端仅代理对象,你会松动的同时的组件支持(优势NSFetchedResultsController / RBQFetchedResultsController ),并进一步便利持久性框架可以提供。 (例如,更改通知,自动更新等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM