Проблема сохранения целостности управляемого объекта данных - PullRequest
0 голосов
/ 08 января 2019

Что я делаю, так это то, что я вызываю список категорий из API и проверяю их номер версии, и если они отличаются от тех, которые сохранены в моей базе данных, я звоню для загрузки файла json, полного данных новых песен и сохранения их в базе данных основных данных каждой категории, которая нуждалась в обновлении.

Я сохраняю управляемый объект категории в глобальном массиве после получения его из API и фильтрую его только для тех категорий, которые нуждаются в обновлении, чтобы я мог получить к нему доступ позже из расширения URLSessionDownloadDelegate после загрузки. сделано, поэтому я обновляю данные о категориях, также известные как "номер версии и т. д." Моя проблема, когда я вызываю массив для печати категорий внутри него. Это data<fault>, но когда я печатаю глобальную переменную из самого viewDidLoad, это нормально.

var updatedCategoriesData = [CategoryManagedObject]()

override func viewDidLoad() {
    super.viewDidLoad()
    rotated()
    activityIndic.center = view.center
    view.addSubview(activityIndic)
    loadCategories()
    Constants.networkManager.loadCategories(checkUpdates: true) { (categories, msg) in
        guard categories != nil else {return}
        guard self.languages != nil else {return}
        if categories!.count > 0 {
            self.updatedCategoriesData = categories!

            print(self.updatedCategoriesData) //DATA NOT FAULT
            self.setupDownload()

        } else {
            print("NO UPDATE")
        }
    }

}

extension CategoriesTableViewController: URLSessionDelegate, URLSessionDownloadDelegate {
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
    percentageLabel.text = "99%"
    for tasksInfo in downloadTaskList {
        if tasksInfo.downloadTaskId == downloadTask.taskIdentifier {
            tasksInfo.isDownload = false
            tasksInfo.downloadedData = nil
            if let loc = saveToDirectory(downloadTask, location: location) {
                saveJsonSongsInDB(filename: loc, category: languages!.filter{$0.name == tasksInfo.name!}.first!)
            }
        }
    }
    downloadFileIndex -= 1
    if downloadFileIndex >= 0 {
        startDownloading(self.downloadTaskList[self.downloadFileIndex])
    } else {
        //Data fault
        if Constants.coreDataStack.updateAllCategoryData(newData: updatedCategoriesData) { //Data fault
            DispatchQueue.main.async {
                self.popOverView.removeFromSuperview()
                self.tableView.reloadData()
            }
        } else {
            DispatchQueue.main.async {
                self.popOverView.removeFromSuperview()
                self.showAlert(title: "Error", msg: "Error updating songs database")
            }
        }
    }
}

Первый отпечаток с viewDidLoad в порядке

[ (сущность: Категории; id: 0x2817ec400 ; данные: { coverPhotoBit64 = "/ 9J / 4RI + RXhpZgAATU0AKgAAAAgADAEAAAMAAAABAggAAAEBAAMAAAABAOwAAAECAAMAAAADAAAAngEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEaAAUAAAABAAAApAEbAAUAAAABAAAArAEoAAMAAAABAAIAAAExAAIAAAAdAAAAtAEyAAIAAAAU"; id = 6; imgUrl = "http://81.217.174.200/img/category/1540910884.jpg"; jsonUrl = "http://81.217.174.200/storage/french.json"; имя = французский; заказ = 2; песни = ( ); версия = 3; })] 1 [(сущность: Категории; id: 0x2817ec400 ; данные: { coverPhotoBit64 = "/ 9J / 4RI + RXhpZgAATU0AKgAAAAgADAEAAAMAAAABAggAAAEBAAMAAAABAOwAAAECAAMAAAADAAAAngEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEaAAUAAAABAAAApAEbAAUAAAABAAAArAEoAAMAAAABAAIAAAExAAIAAAAdAAAAtAEyAAIAAAAU"; id = 6; imgUrl = "http://81.217.174.200/img/category/1540910884.jpg"; jsonUrl = "http://81.217.174.200/storage/french.json"; имя = французский; заказ = 2; песни = ( ); версия = 3; })] * * Тысяча двадцать-два

Вторая распечатка с расширения или даже когда я распечатываю его откуда-то еще из нашего viewDidLoad

> [<CategoryManagedObject: 0x2834849b0> (entity: Categories; id:
> >0x2817ec400 <x-coredata:///Categories/tC7259021-7A75-4C8F-A7D7->D7419A857F4A11> ;
> data: <fault>)]

Есть ли у меня проблема с памятью здесь? Может быть, это bit64 изображения такого большого размера? Мне нужно знать, что происходит, и мне нужны эти данные для обновления категорий db-сущностей после завершения загрузки.

...