SwifUI:我下载的JSON是否保存到coreData?
我一直在摆弄CoreData,这次我试图将下载的JSON保存到core数据中。我不会得到任何错误,直到我尝试显示列表,它将返回空。 任何建议都将不胜感激 模型 AttributeArticle+CoreDataProperties.swiftSwifUI:我下载的JSON是否保存到coreData?,json,core-data,swiftui,Json,Core Data,Swiftui,我一直在摆弄CoreData,这次我试图将下载的JSON保存到core数据中。我不会得到任何错误,直到我尝试显示列表,它将返回空。 任何建议都将不胜感激 模型 AttributeArticle+CoreDataProperties.swift extension AttributeArticle { @nonobjc public class func fetchRequest() -> NSFetchRequest<AttributeArticle> {
extension AttributeArticle {
@nonobjc public class func fetchRequest() -> NSFetchRequest<AttributeArticle> {
return NSFetchRequest<AttributeArticle>(entityName: "AttributeArticle")
}
@NSManaged public var card_artwork_url: String?
@NSManaged public var content_type: String?
...
public var wrapperCard_artwork_url : String {
card_artwork_url ?? "Unknown"
}
...
}
我的名单:
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: AttributeArticle.entity(), sortDescriptors: []) var articles: FetchedResults<AttributeArticle>
VStack {
List() {
ForEach(articles, id: \.id) { article in
NavigationLink(destination: ArticleDetailView(articles: article)){
ArticleRowView(articles: article)
}
}
}
}.onAppear {
if self.articles.isEmpty {
print("Articles is empty \(self.articles)")
Article.loadDataToCD(moc: self.moc)
}
@Environment(\.managedObjectContext)变量moc
@FetchRequest(实体:AttributeArticle.entity(),sortDescriptors:[])var文章:FetchedResults
VStack{
列表(){
ForEach(articles,id:\.id){articles in
导航链接(目的地:ArticleDetailView(文章:文章)){
ArticleRowView(文章:文章)
}
}
}
}奥纳佩尔先生{
如果self.articles.isEmpty{
打印(“文章为空\(self.Articles)”)
Article.loadDataToCD(moc:self.moc)
}
很抱歉发了这么长的帖子,感谢您的帮助!您没有收到错误,因为您忽略了解码错误。有一个错误。谢谢您,我已修复,列表已显示。谢谢您为我指出这一点!
class Article {
static func loadDataFromJSON(completion: @escaping ([ArticleData]) -> ()) {
let stringURL = "https://api.jsonbin.io/b/5ed679357741ef56a566a67f"
guard let url = URL(string: stringURL) else { return }
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) {
data, response, error in
guard let data = data else {
print("No data in response \(error?.localizedDescription ?? "No data response")")
return
}
if let decoderLoadedUser = try? JSONDecoder().decode([ArticleData].self, from: data) {
completion(decoderLoadedUser)
}
}.resume()
}
static func loadDataToCD(moc: NSManagedObjectContext) {
loadDataFromJSON { (articles) in
DispatchQueue.main.async {
var tempArticles = [AttributeArticle]()
for article in articles {
let newArticle = AttributeArticle(context: moc)
newArticle.name = article.attributes.name
newArticle.card_artwork_url = article.attributes.card_artwork_url
... so on
...
tempArticles.append(newArticle)
}
do {
try moc.save()
} catch let error {
print("Could not save data: \(error.localizedDescription)")
}
}
}
}
}
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: AttributeArticle.entity(), sortDescriptors: []) var articles: FetchedResults<AttributeArticle>
VStack {
List() {
ForEach(articles, id: \.id) { article in
NavigationLink(destination: ArticleDetailView(articles: article)){
ArticleRowView(articles: article)
}
}
}
}.onAppear {
if self.articles.isEmpty {
print("Articles is empty \(self.articles)")
Article.loadDataToCD(moc: self.moc)
}