我想从API下载JSON并将对象存储到CoreData中。 JSON的下载和解码有效,但是我无法将对象直接存储到CoreData中。
我试图为我的对象创建一个实体,但应用程序未将对象保存到CoreData。
我总是收到错误:未解决的错误nilError,该操作无法完成。 (Foundation._GenericObjCError错误0。)。不知道为什么它不再工作了
我用它来下载和解码JSON:
class ItemDownloader: ObservableObject {
@Published var items: Items = [Item]()
@Environment(\.managedobjectcontext) var managedobjectcontext
let itemEndpoint = „https:…………“
init() {
guard let url = URL(string: itemEndpoint) else { return }
URLSession.shared.dataTask(with: url) { (data,response,error) in
do {
guard let data = data else { return }
let items = try JSONDecoder().decode(Items.self,from: data)
print(items)
DispatchQueue.main.async {
self.items = items
}
do {
guard let jsonArray = try JSONSerialization.jsonObject(with: data,options: []) as? [[String: Any]] else {return}
let coreitems: [CoreItem] = jsonArray.compactMap { [weak self] in
guard
let name = $0["name"] as? String,let id = $0["id"] as? Int16
else {return nil }
print(name)
print(id)
let coreitem = CoreItem(context: self!.managedobjectcontext)
coreitem.name = name
coreitem.id = id
print(coreitem.name)
print(coreitem.id)
return coreitem
}
do{
try self.managedobjectcontext.save()
} catch{
print(error)
}
print(coreitems)
print(NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory,.userDomainmask,true).last!);
}
} catch {
print("Error decoding JSON: ",error)
}
}.resume()
}
}
并将其存储到CoreData中:
public class CoreItem: NSManagedObject,Identifiable {
@NSManaged public var name: String
@NSManaged public var id: Int16
}
extension CoreItem {
static func getallCoreItems() -> NSFetchRequest <CoreItem> {
let request:NSFetchRequest<CoreItem> = CoreItem.fetchRequest() as!
NSFetchRequest<CoreItem>
let sortDescriptor = NSSortDescriptor(key: "id",ascending: true)
request.sortDescriptors = [sortDescriptor]
return request
}
}
如何将对象保存在CoreData中?
感谢您的帮助。