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]()
User
class没用
如果您在核心数据中设计用户模型,则不必自己编写 class。事实上,默认情况下 Xcode 将在您的项目中创建 NSManagedObject 的子 class 时自动生成它们,但如果您想添加其他功能,您也可以手动生成它们:
然后你可以去编辑器手动生成classes
这样做会给你 User+CoreDataClass.swift
和 User+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)")
}
到目前为止,我可以在 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
.
如果您的实体名为 UserData
,您必须声明数组
var users = [UserData]()
User
class没用
如果您在核心数据中设计用户模型,则不必自己编写 class。事实上,默认情况下 Xcode 将在您的项目中创建 NSManagedObject 的子 class 时自动生成它们,但如果您想添加其他功能,您也可以手动生成它们:
然后你可以去编辑器手动生成classes
这样做会给你 User+CoreDataClass.swift
和 User+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)")
}