Swift: запрос извлечения Core Data в массив Core Data Entity - PullRequest
1 голос
/ 17 марта 2019

Я пытаюсь извлечь некоторые значения из хранилища CoreData, типизированного как массив сгенерированных классов Entity CoreData.Возможно ли это?

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!
)

Кроме того, для контекста это то, что я подразумеваю под сущностью CoreData:

CoreData entity

1 Ответ

1 голос
/ 17 марта 2019

Так что я думаю, что ваша проблема заключается в коде, где вы создаете объекты:

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 выведет правильную сущность на основе класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...