Swift: CoreData 错误以及如何设置实体和数据模型?

Swift: CoreData error and how to set up entities and DataModels?

到目前为止,我可以在 swift 文件中创建自己的数据模型。类似于:

User.swift:

class User {
    var name: String
    var age: Int

    init?(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

当我创建核心数据模型时,即。一个 UserData 实体,(1) 我是否必须添加与我自己的数据模型中相同数量的属性,所以在这种情况下是两个 - 姓名和年龄? 或者(2)它可以只有一个属性吗?姓名(而不是年龄)?

我的核心数据模型:

用户数据

我遇到的第二个问题是,当我开始提取请求时,我在 Xcode 中收到一个奇怪的错误。这就是我启动 fetchRequest 的方式(AppDelegate 的设置与文档中建议的一样):

var users = [User]()
var managedObjectContext: NSManagedObjectContext!
...

func loadUserData() {

    let dataRequest: NSFetchRequest<UserData> = UserData.fetchRequest()

    do {
        users = try managedObjectContext.fetch(dataRequest)
    ....
    } catch {
        // do something here
    }
}

我收到的错误是“无法将类型 '[UserData] 的值分配给类型 [User]

这个错误是什么意思?官方文档中描述了一些错误,但不是这个。

您不能使用自定义(简单)classes 作为核心数据模型。

类 用作核心数据模型 必须NSManagedObject.

的子class

如果您的实体名为 UserData,您必须声明数组

var users = [UserData]()

Userclass没用

如果您在核心数据中设计用户模型,则不必自己编写 class。事实上,默认情况下 Xcode 将在您的项目中创建 NSManagedObject 的子 class 时自动生成它们,但如果您想添加其他功能,您也可以手动生成它们:

然后你可以去编辑器手动生成classes

这样做会给你 User+CoreDataClass.swiftUser+CoreDataProperties.swift。我在你的问题中看到你问的是核心数据模型与你的 'own' 模型相比如何,但如果你使用的是核心数据,那么这就是模型。生成的用户 class,它是 NSManagedObject 的子class,就是您所需要的。

那么您可能会像这样获取用户:

let userFetch = NSFetchRequest(entityName: "User")
do {
    users = try managedObjectContext.executeFetchRequest(userFetch) as! [User]
} catch {
    fatalError("Failed to fetch users: \(error)")
}