Попытка получить запись Core Data с помощью ObjectID возвращает ноль - PullRequest
0 голосов
/ 23 мая 2018

Когда я сохраняю новую запись в своей базе данных, я получаю ее постоянный ObjectID и сохраняю ее как строку в UserDefaults.Мой метод save выглядит следующим образом:

func save(completion: (Bool) -> Void) {
    if validate() {
        coreDataStack.saveContext(managedObjectContext)

        let isSaved = user.objectID.isTemporaryID
        completion(isSaved)

        do {
            try managedObjectContext.obtainPermanentIDs(for: [user])
            UserDefaults.standard.set(user.objectID.uriRepresentation().absoluteString, forKey: Constansts.shared.kCurrentUser)
        } catch let error as NSError {
            print("Could not obtain permanent ID for the user. \(error.localizedDescription)")
        }
    } else {
        completion(false)
    }
}

и позже я пытаюсь получить эту запись по ObjectID как:

let coreDataStack = CoreDataStack(modelName: "MyDB")

        do {
            if let currentUser = UserDefaults.standard.string(forKey: Constansts.shared.kCurrentUser), let objectURL = URL(string: currentUser) {
                let coordinator = NSPersistentStoreCoordinator(managedObjectModel: coreDataStack.storeContainer.managedObjectModel)
                if let objectID = coordinator.managedObjectID(forURIRepresentation: objectURL) {
                    let user = try coreDataStack.mainContext.existingObject(with: objectID) as! Users

                    let viewController = segue.destination as! ViewController
                    viewController.viewModel = NewPlanViewModel(for: user, with: coreDataStack, and: coreDataStack.mainContext)
                }
            } else {
                fatalError("Could not find the user to create a new plan for him.")
            }
        } catch let error as NSError {
            print("Could not get current user. \(error.localizedDescription)")
        }

И в результате получаю * hier nil.Сначала я думал, что это из-за permanentID и temporalID, но после использования try managedObjectContext.obtainPermanentIDs(for: [user]) я получаю то же самое nil.

Может ли кто-нибудь помочь мне улучшить мой код?

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