首页 > 解决方案 > 尝试通过 ObjectID 获取核心数据记录返回 nil

问题描述

当我将一条新记录保存到我的数据库中时,我将获得它的永久 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)")
        }

结果,我得到了更高级的结果nil。起初我认为这是因为,permanentIDtemporalID使用后try managedObjectContext.obtainPermanentIDs(for: [user])我得到了相同的结果nil

有人可以帮助我改进我的代码吗?

标签: iosswiftcore-data

解决方案


推荐阅读