Как извлечь объект из дочернего контекста в другой контекст? - PullRequest
1 голос
/ 26 марта 2019

Я не могу получить доступ к вновь сохраненному объекту, используя objectID.

Я создал дочерний контекст управляемого объекта (cmoc) из моего managedContext и создал новый объект внутри этого cmoc.После того как я ввел переменные в новый объект, я вызвал save () для дочернего контекста, сохранил в родительском контексте, а затем попытался загрузить объект в родительском контексте (и при моих попытках в другом фоновом контексте)используя objectID.Это не удалось, и я не знаю, почему.

Я гарантировал, что сохранение происходит до попытки вернуть объект в новом контексте, и это не помогло.Я убедился, что сохраняю правильный cmoc и родительский контекст.Я немного растерялся.

Чтобы создать childContext, экземпляр объекта person (типа Person) и перейти к следующему vc (destVC):

let childContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
childContext.parent = coreDataStack.managedContext
let person = Person(context: childContext)
destVC.coreDataStack = coreDataStack
destVC.person = person
destVC.childContext = childContext

Затем переменныедобавлен в экземпляр лица

person.cellPhone = ... [etc]

Я подозреваю, что моя проблема в коде сохранения, который в настоящее время гласит:

guard childContext.hasChanges else {
    return
}
do {
    try self.newKeyNumberContext.save()
} catch let error as NSError {
    [Manage error]
}
coreDataStack.saveContext()

Или в коде сразу после этого:

let personObjectID = self.person.objectID    //(does return an objectID)

let personToReturn = try? coreDataStack.managedContext.existingObject(with: personObjectID)

, который не возвращает объект, вместо него возвращается nil.

1 Ответ

0 голосов
/ 26 марта 2019

Ах, получается, что эта ссылка из stackOverflow привела меня к решению.У меня был только временный идентификатор и запрос постоянного идентификатора, прежде чем сохранение решило проблему.Я вставил строку ниже над строкой guard childContext.hasChanges, и она разобралась.

try? childContext.obtainPermanentIDs(for: [person])
...