到目前为止,我可以在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] 类型。
这个错误是什么意思?在官方文档中描述了一些错误,但不是特别的错误。
答案 0 :(得分:0)
您不能将自定义(简单)类用作核心数据模型。
用作核心数据模型的类必须是NSManagedObject
的子类。
如果您的实体名为UserData
,则必须声明数组
var users = [UserData]()
User
类没用。
答案 1 :(得分:0)
如果您在核心数据中设计用户模型,则不必自己编写课程。事实上,默认情况下,Xcode会在您的项目中创建NSManagedObject后自动生成子类,但如果您想添加其他功能,也可以手动生成它们:
然后你可以去编辑并手动生成类
执行此操作会为您User+CoreDataClass.swift
和User+CoreDataProperties.swift
。我在您的问题中看到,您在询问核心数据模型与您自己的核心数据模型的比较情况。模型,但如果您正在使用核心数据那么这就是模型。生成的User类,它是NSManagedObject的子类,是您所需要的。
然后你可以像这样获取用户:
let userFetch = NSFetchRequest(entityName: "User")
do {
users = try managedObjectContext.executeFetchRequest(userFetch) as! [User]
} catch {
fatalError("Failed to fetch users: \(error)")
}