У меня есть следующая общая функция, которая работает: она правильно создает объекты, и я знаю, что она сохраняется в основных данных, потому что, если сразу после этого сделать запрос на выборку, я получу только что созданный объект.Однако сам объект не является допустимым объектом базовых данных (ошибка данных 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
}
}