Сбои происходят во время обновления coredata - PullRequest
0 голосов
/ 26 августа 2018

Мой код 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()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...