Я столкнулся с довольно странной проблемой, когда использовал CoreData . Я получил расширение, которое сохраняет, и получает активный профиль , сохраненный в CoreData с помощью , используя UserDefaults для хранения активного профиля ObjectID .
extension NSPersistentContainer {
private var managedObjectIDKey: String {
return "activeUserObjectID"
}
var activeUser: Profile? {
get {
guard let url = UserDefaults.standard.url(forKey: managedObjectIDKey) else {
return nil
}
guard let managedObjectID = persistentStoreCoordinator.managedObjectID(forURIRepresentation: url) else {
return nil
}
return viewContext.object(with: managedObjectID) as? Profile
}
set {
guard let newValue = newValue else {
UserDefaults.standard.removeObject(forKey: managedObjectIDKey)
return
}
UserDefaults.standard.set(newValue.objectID.uriRepresentation(), forKey: managedObjectIDKey)
}
}
}
В целом все это прекрасно работает, но потом я обнаружил очень странную ошибку. Пользователь может удалить профили (НО НЕ СОВРЕМЕННО АКТИВНО!)
Ошибка заключается в следующем: Как только я удаляю, например, Profile 2
, пока Profile 1
активируется, как только удаление заканчивается, Profile 1
больше не активируется.
При попытке распечатать переменную activeUser возвращает только данные: ошибка вместо данные: { все данные } . Смотрите скриншот ниже:
![](https://i.stack.imgur.com/mmWH7.png)
Первая строка печатается перед удалением Profile 2
, вторая строка печатается непосредственно после удаления профиля, а третья после повторной активации профиля печатается строка.
Я понятия не имею, что могло вызвать эту ошибку и потратить много времени на ее обнаружение, но не удалось.
Если у вас есть идеи, пожалуйста, дайте мне сейчас. Может ли ObjectID всех NSManagedObjects измениться после удаления одного? Или есть что-то еще, о чем я не думал?
Спасибо за вашу помощь заранее.