Загрузите управляемый объект с помощью Uri - PullRequest
0 голосов
/ 07 мая 2018

Я работаю над простым приложением 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 */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...