Swift:向核心数据实体数组获取核心数据的请求

时间:2019-03-17 10:18:26

标签: swift core-data

我正在尝试从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!")
}

此打印语句仅将以下内容打印到控制台:

Printed entity object

像这样使用这些实体类是否错误?我之前曾用它们来创建数据(请参见下面的用法),所以您确定也可以将它们用作模型吗?

let responseEntity = NSEntityDescription.entity(forEntityName: "Response", in: managedContext)!
let response = Response(
    context: NSManagedObject(
        entity: responseEntity,
        insertInto: managedContext
    ).managedObjectContext!
)

另外,就上下文而言,这就是我所说的Cor​​eData实体的意思:

CoreData entity

1 个答案:

答案 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将根据类推断正确的实体。