gpt4 book ai didi

ios - 解码为 NSManagedObject 对象后需要获取请求

转载 作者:行者123 更新时间:2023-11-29 05:57:42 24 4
gpt4 key购买 nike

我有以下有效的通用函数:它正确地创建了对象,并且我知道它被保存到核心数据中,因为如果之后立即执行提取请求,我会得到刚刚创建的对象。但是,该对象本身不是有效的核心数据对象(x-core 数据错误)。有什么办法可以让我不必在解码对象后立即执行获取请求吗?非常感谢。

func decode<T: Decodable>(data: Data?, objectType: T.Type, save: Bool = true, completionHandler: @escaping (T) -> ())
{
guard let d = data else { return }
do
{
let privateContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
privateContext.parent = SingletonDelegate.shared.context

let root = try JSONDecoder(context: privateContext).decode(objectType, from: d)

if save
{
try privateContext.save()
privateContext.parent?.performAndWait
{
do
{
if let p = privateContext.parent
{
try p.save()
}

}catch
{
print(error)
}
}
}
DispatchQueue.main.async
{
completionHandler(root)
}
}catch
{
print(error)
}
}

extension CodingUserInfoKey
{
static let context = CodingUserInfoKey(rawValue: "context")!
}


extension JSONDecoder
{
convenience init(context: NSManagedObjectContext)
{
self.init()
self.userInfo[.context] = context
}
}

最佳答案

核心数据错误一个有效的核心数据对象;它只是还没有从后备存储检索到内存中。

为了减少内存使用,Core Data 仅在您访问其属性之一时才获取完整对象。这种获取是自动的,并且对您的代码来说是有效透明的。

这意味着您不需要做任何特别的事情;您可以只使用托管对象。

关于ios - 解码为 NSManagedObject 对象后需要获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54987521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com