我正在处理一个简单的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 */