ios - 尝试通过 ObjectID 获取核心数据记录返回 nil
问题描述
当我将一条新记录保存到我的数据库中时,我将获得它的永久 ObjectID 并将其保存为UserDefaults
. 我的save
方法看起来像:
func save(completion: (Bool) -> Void) {
if validate() {
coreDataStack.saveContext(managedObjectContext)
let isSaved = user.objectID.isTemporaryID
completion(isSaved)
do {
try managedObjectContext.obtainPermanentIDs(for: [user])
UserDefaults.standard.set(user.objectID.uriRepresentation().absoluteString, forKey: Constansts.shared.kCurrentUser)
} catch let error as NSError {
print("Could not obtain permanent ID for the user. \(error.localizedDescription)")
}
} else {
completion(false)
}
}
后来我试图通过 ObjectID 获取该记录:
let coreDataStack = CoreDataStack(modelName: "MyDB")
do {
if let currentUser = UserDefaults.standard.string(forKey: Constansts.shared.kCurrentUser), let objectURL = URL(string: currentUser) {
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: coreDataStack.storeContainer.managedObjectModel)
if let objectID = coordinator.managedObjectID(forURIRepresentation: objectURL) {
let user = try coreDataStack.mainContext.existingObject(with: objectID) as! Users
let viewController = segue.destination as! ViewController
viewController.viewModel = NewPlanViewModel(for: user, with: coreDataStack, and: coreDataStack.mainContext)
}
} else {
fatalError("Could not find the user to create a new plan for him.")
}
} catch let error as NSError {
print("Could not get current user. \(error.localizedDescription)")
}
结果,我得到了更高级的结果nil
。起初我认为这是因为,permanentID
但temporalID
使用后try managedObjectContext.obtainPermanentIDs(for: [user])
我得到了相同的结果nil
。
有人可以帮助我改进我的代码吗?
解决方案
推荐阅读
- java - 如何处理 webview 缓存
- uwp - ReactiveUI 和 UWP – 这些绑定警告/错误来自哪里?
- azure - 使用 sysprep.exe 概括 azure-vm 失败 [0x0f0085 - 无法加载 DLL]
- java - 尝试在邮递员中验证用户身份 - 获得“403 Forbidden”
- java - Microsoft Graph 更新事件附件未在与会者邀请中更新
- jquery - jQuery 没有验证
- unit-testing - 使用 addFilters = false 模拟 @AuthenticationPrincipal MockMvc
- sparql - SPARQL Wikidata 请求字符串内容以获取人类所属的所有组织?
- python - 如何在python中将变量从一个文件导入另一个文件
- php - 控件不进入 if(isset()))