在我的应用程序第一次从关闭启动时进行网络通话时,我试图显示一个加载微调器。这些网络调用通常花费很少的时间,因为它们是json字符串上的GET并对其进行了一些处理,但是如果它们花费的时间比平时长,我不希望我的用户尝试在没有数据的情况下在应用中进行操作需要在那里。因此,当这些调用正在进行时,我试图向您展示微调器。但是微调框永远不会出现。在进行很多更改之前,我已经进行了此工作,现在又不工作了,而且我一生都无法找出原因。
这是HomeViewController中的viewDidLoad()方法,此信息从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()
}
答案 0 :(得分:1)
您需要删除此
DispatchQueue.main.sync {
dataModelManager.loadGames(gameApiResponses: data)
}
}
}
})
self.removeSpinner(). <<<<<< this line
}
,因为调用是异步的,所以您可以在使用self.showSpinner(onView: self.view)