Я работаю над простым приложением ToDo и сохраняю Uri выбранного в данный момент List
в пользовательских настройках по умолчанию, чтобы я мог загрузить нужный снова при следующем запуске приложения.
Моя проблема в том, что даже если я удалю соответствующий List
из контекста управляемого объекта
coordinator.managedObjectID(forURIRepresentation: uri)
возвращает NSManagedObjectID
, что является проблемой, поскольку viewContext.object(with: listId)
затем возвращает ошибочный List
, который больше не существует.
func selectedList() -> List? {
guard let uri = UserDefaults.standard.selectedListUri() else
{ print("Could not get Uri from User Defaults"); return nil }
guard let coordinator = viewContext.persistentStoreCoordinator else
{ print("Store Coordinator is nil"); return nil }
guard let listId = coordinator.managedObjectID(forURIRepresentation: uri) else
{ print("Store Coordinator could not get managedObjectID of the entity"); return nil }
guard let list = viewContext.object(with: listId) as? List else
{ print("WARNING: Object for managedObjectID is not a *List*"); return nil }
return list
}
Я не уверен, является ли это предполагаемым поведением, но если так, есть ли способ сохранить, чтобы проверить, действителен ли ошибочный Список?
Я понял, что мог бы сделать это следующим образом, я уверен, что это не то поведение, которое предполагается, потому что ссылка указывает, что, когда сущность не существует, но возникает ошибка, возникает исключение.
объект func (с objectID: NSManagedObjectID) -> NSManagedObject
Этот метод всегда возвращает объект. Предполагается, что данные в постоянном хранилище, представленные objectID, существуют - если это не так, возвращаемый объект выдает исключение при доступе к какому-либо свойству (то есть при возникновении ошибки).
Однако я могу получить доступ к свойству createdAt
и получить ноль, хотя свойство не является обязательным, но, похоже, исключение не возникает.
let createdAt = list.createdAt
print(createdAt) /* Prints nil */