Когда я сохраняю новую запись в своей базе данных, я получаю ее постоянный 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
.
Может ли кто-нибудь помочь мне улучшить мой код?