CoreData NSManagedObject != NIL 怎么可能不包含任何数据(数据:<fault>)?
How can CoreData NSManagedObject != NIL but does not contain any data (data: <fault>)?
我在使用 CoreData 时遇到了一个很奇怪的问题。我得到了一个扩展,它通过 使用 UserDefaults 保存 获取保存在 CoreData 中的活动配置文件 来存储 活动配置文件 ObjectID.
extension NSPersistentContainer {
private var managedObjectIDKey: String {
return "activeUserObjectID"
}
var activeUser: Profile? {
get {
guard let url = UserDefaults.standard.url(forKey: managedObjectIDKey) else {
return nil
}
guard let managedObjectID = persistentStoreCoordinator.managedObjectID(forURIRepresentation: url) else {
return nil
}
return viewContext.object(with: managedObjectID) as? Profile
}
set {
guard let newValue = newValue else {
UserDefaults.standard.removeObject(forKey: managedObjectIDKey)
return
}
UserDefaults.standard.set(newValue.objectID.uriRepresentation(), forKey: managedObjectIDKey)
}
}
}
整个想法大部分时间都运行良好,但后来我发现了一个非常奇怪的错误。用户可以删除个人资料 (但不是当前活动的个人资料!)
错误如下:一旦我删除例如Profile 2
当 Profile 1
被激活时,一旦删除完成 Profile 1
就不再被激活。
当试图打印出 activeUser 变量时,它 returns 只有 data: fault 而不是 data: {all the数据}。请参阅下面的屏幕截图:
删除前打印第一行Profile 2
,删除配置文件后直接打印第二行,再次激活配置文件后打印第三行
我不知道是什么导致了这个错误,我花了很多时间来寻找这个错误,但一直没有成功。
如果您有任何想法,请立即告诉我。删除一个后,所有 NSManagedObjects 的 ObjectID 是否会发生变化?或者还有什么我没有想到的?
提前感谢您的帮助。
显示<fault>
的对象的对象id与其他两个不同。如果我理解正确,您的意图是始终保持相同的配置文件处于活动状态,但情况似乎并非如此,即某些东西正在激活不同的配置文件。
我在使用 CoreData 时遇到了一个很奇怪的问题。我得到了一个扩展,它通过 使用 UserDefaults 保存 获取保存在 CoreData 中的活动配置文件 来存储 活动配置文件 ObjectID.
extension NSPersistentContainer {
private var managedObjectIDKey: String {
return "activeUserObjectID"
}
var activeUser: Profile? {
get {
guard let url = UserDefaults.standard.url(forKey: managedObjectIDKey) else {
return nil
}
guard let managedObjectID = persistentStoreCoordinator.managedObjectID(forURIRepresentation: url) else {
return nil
}
return viewContext.object(with: managedObjectID) as? Profile
}
set {
guard let newValue = newValue else {
UserDefaults.standard.removeObject(forKey: managedObjectIDKey)
return
}
UserDefaults.standard.set(newValue.objectID.uriRepresentation(), forKey: managedObjectIDKey)
}
}
}
整个想法大部分时间都运行良好,但后来我发现了一个非常奇怪的错误。用户可以删除个人资料 (但不是当前活动的个人资料!)
错误如下:一旦我删除例如Profile 2
当 Profile 1
被激活时,一旦删除完成 Profile 1
就不再被激活。
当试图打印出 activeUser 变量时,它 returns 只有 data: fault 而不是 data: {all the数据}。请参阅下面的屏幕截图:
删除前打印第一行Profile 2
,删除配置文件后直接打印第二行,再次激活配置文件后打印第三行
我不知道是什么导致了这个错误,我花了很多时间来寻找这个错误,但一直没有成功。
如果您有任何想法,请立即告诉我。删除一个后,所有 NSManagedObjects 的 ObjectID 是否会发生变化?或者还有什么我没有想到的?
提前感谢您的帮助。
显示<fault>
的对象的对象id与其他两个不同。如果我理解正确,您的意图是始终保持相同的配置文件处于活动状态,但情况似乎并非如此,即某些东西正在激活不同的配置文件。