Я пытаюсь показать счетчик загрузки, когда делаю некоторые сетевые вызовы, когда мое приложение впервые запускается после закрытия. Эти сетевые вызовы обычно занимают очень мало времени, потому что они представляют собой GET-запросы строки json и некоторую их обработку, но если они занимают больше времени, чем обычно, я не хочу, чтобы мои пользователи пытались маневрировать в приложении без данных, которые они нужно быть там. Итак, я пытаюсь показать счетчик, когда происходят эти звонки. Но спиннер так и не появляется. У меня это работало до того, как я многое изменил, и теперь оно снова не работает, и я не могу понять, почему.
Вот мой метод viewDidLoad() в моем HomeViewController, где эта информация извлекается из API и загружается в CoreData.
override func viewDidLoad() {
super.viewDidLoad()
self.showSpinner(onView: self.view)
let teamsByConferenceNetworkManager = TeamsByConferenceNetworkManager()
teamsByConferenceNetworkManager.getTeamsByConference(completion: { (data, error) in
guard let data = data else {
os_log("Could not unwrap teamsByConference data in LoginViewController.viewDidLoad()", type: .debug)
self.removeSpinner()
let _ = UIAlertAction(title: "Network unavailable", style: .cancel, handler: { (alert) in
alert.isEnabled = true
})
return
}
let dataModelManager = DataModelManager.shared
DispatchQueue.main.sync {
dataModelManager.loadTeamNamesByConference(teamNamesByConferenceName: data)
dataModelManager.loadGamesFromCoreData()
}
if let _ = dataModelManager.allGames {
self.removeSpinner()
return
} else {
let gamesNetworkManager = GamesNetworkManager()
gamesNetworkManager.getGames { (data, error) in
guard let data = data else {
os_log("Could not unwrap games data in LoginViewController.viewDidLoad()", type: .debug)
self.removeSpinner()
let _ = UIAlertAction(title: "Network unavailable", style: .cancel, handler: { (alert) in
alert.isEnabled = true
})
return
}
DispatchQueue.main.sync {
dataModelManager.loadGames(gameApiResponses: data)
}
}
}
})
self.removeSpinner()
}





Вам нужно удалить это
DispatchQueue.main.sync {
dataModelManager.loadGames(gameApiResponses: data)
}
}
}
})
self.removeSpinner(). <<<<<< this line
}
поскольку вызов асинхронный, и вы удаляете счетчик сразу после его добавления с помощью self.showSpinner(onView: self.view)
Я думаю, вам нужно добавить «self.removeSpinner ()» после получения ответа от API. прямо сейчас вы добавляете и удаляете счетчик одновременно