Swift:CoreData错误以及如何设置实体和DataModel?

时间:2018-03-18 19:47:44

标签: ios swift core-data datamodel

到目前为止,我可以在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)它只有一个属性,例如。姓名(而非年龄)?

我的核心数据模型:

的UserData

  • 名称
  • 年龄

我遇到的第二个问题是,当我启动获取请求时,我在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
    }
}

我得到的错误是&#34; 无法将类型&#39; [UserData]的值分配到[User] 类型。

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

2 个答案:

答案 0 :(得分:0)

您不能将自定义(简单)类用作核心数据模型。

用作核心数据模型的类必须NSManagedObject的子类。

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

var users = [UserData]()

User类没用。

答案 1 :(得分:0)

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

enter image description here

然后你可以去编辑并手动生成类

enter image description here

执行此操作会为您User+CoreDataClass.swiftUser+CoreDataProperties.swift。我在您的问题中看到,您在询问核心数据模型与您自己的核心数据模型的比较情况。模型,但如果您正在使用核心数据那么这就是模型。生成的User类,它是NSManagedObject的子类,是您所需要的。

然后你可以像这样获取用户:

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