Мой код chrashesh во время обновления основных данных или я получаю пустую ячейку таблицы. я сохраняю данные json в coredata и показываю их в виде таблицы. Почему я не могу обновить свои данные. Есть ли проблемы с моим кодом?
для таких случаев лучше использовать пакетное обновление?
func updateStories () {
let moc = coreData.persistentContainer.viewContext
let myUrlString = "https://hacker-news.firebaseio.com/v0/topstories.json"
guard let newsUrl = URL(string: myUrlString) else { return }
URLSession.shared.dataTask(with: newsUrl) { (data, responce, err) in
if err != nil{
print("err in fetching data", err!)
return
}
else {
let group = DispatchGroup()
guard let jsonResult = try! JSONSerialization.jsonObject(with: data!) as? [Int] else { return }
for anInt in jsonResult {
let myString = "https://hacker-news.firebaseio.com/v0/item/\(anInt).json"
guard let myUrl = URL(string: myString) else { return }
group.enter()
URLSession.shared.dataTask(with: myUrl, completionHandler: { (data, responce, err) in
if err != nil {
print("err in fetching data", err!)
group.leave()
return
}
else {
guard let allData = try? JSONSerialization.jsonObject(with: data!) as? [String:Any] else {
group.leave()
return
}
let context = self.coreData.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "News")
request.returnsObjectsAsFaults = true
do {
if let result = try context.fetch(request) as? [NSManagedObject]{
for data in result as! [NSManagedObject] {
self.dataArray.append(data.value(forKey: "id") as! Int64)
}
let newId = (allData!["id"]) as? Int
self.idData = Int64(newId!)
self.idArray.append(self.idData)
if self.dataArray.contains(self.idData) {
print("yes data contains")
return
}
else{
var news = News(context: moc)
if let newTitle = (allData!["title"]) as? String{
result[0].setValue(newTitle, forKey: "title")
print(newTitle)
}
if let newScore = (allData!["score"]) as? Int{
result[0].setValue(Int16(newScore), forKey: "score")
}
if let newId = (allData!["id"]) as? Int{
result[0].setValue(Int64(newId), forKey: "id")
}
if let newText = (allData!["text"]) as? String{
result[0].setValue(newText, forKey: "text")
}
if let newUrl = (allData!["url"]) as? String{
result[0].setValue(newUrl, forKey: "url")
}
}
}
} catch {
print("Failed")
}
group.leave()
}
}).resume()
}
group.notify(queue: DispatchQueue.main) {
self.coreData.saveContext()
}
}
}.resume()
DispatchQueue.main.async {
self.refresher.endRefreshing()
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
}