Что я делаю, так это то, что я вызываю список категорий из 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-сущностей после завершения загрузки.