我正在尝试从CoreData存储中获取一些值,该值键入为生成的CoreData Entity类的数组。这可能吗?
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let responseFetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Response")
do {
var responses = try managedContext.fetch(responseFetchRequest) as! [Response]
print(responses[0])
} catch {
print("Failed!")
}
此打印语句仅将以下内容打印到控制台:
像这样使用这些实体类是否错误?我之前曾用它们来创建数据(请参见下面的用法),所以您确定也可以将它们用作模型吗?
let responseEntity = NSEntityDescription.entity(forEntityName: "Response", in: managedContext)!
let response = Response(
context: NSManagedObject(
entity: responseEntity,
insertInto: managedContext
).managedObjectContext!
)
另外,就上下文而言,这就是我所说的CoreData实体的意思:
答案 0 :(得分:1)
所以我认为您的问题出在创建对象的代码中:
let responseEntity = NSEntityDescription.entity(forEntityName: "Response", in: managedContext)!
let response = Response(
context: NSManagedObject(
entity: responseEntity,
insertInto: managedContext
).managedObjectContext!
)
您正在将NSManagedObject(entity: responseEntity, insertInto: managedContext).managedObjectContext!
传递到初始化程序的context
参数中。该代码段的作用是创建一个空白对象,将其插入managedContext
中,然后获取其managedObjectContext
属性。这是在初始化Response
对象之前发生的,因此您每次调用都会创建两个对象。尝试更改为:
let response = Response(context: managedContext)
CoreData将根据类推断正确的实体。