使用Uri

时间:2018-05-07 19:42:51

标签: ios swift core-data swift4

我正在处理一个简单的ToDo应用,并将当前所选List的Uri保存在用户默认值中,以便我可以在下次启动该应用时再次加载正确的。{/ p>

我的问题是即使我从其托管对象上下文中删除了相应的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对象(with objectID:NSManagedObjectID) - > NSManagedObject

     

此方法始终返回一个对象。假定objectID表示的持久性存储中的数据是存在的 - 如果不存在,则在访问任何属性时(即,触发错误时)返回的对象会引发异常。

但是我可以访问属性createdAt并返回nil,尽管该属性是非可选的,但似乎没有异常。

let createdAt = list.createdAt 
print(createdAt) /* Prints nil */

0 个答案:

没有答案
相关问题