У меня есть эта ноющая проблема, которую я просто не могу решить. Я пытаюсь вызвать функцию в определенном классе (называемом BMUserManagementService), но по какой-то причине обработчик завершения в задаче данных не выполняется. Метод ниже (getProfile):
internal func getProfile(completion: @escaping (Bool?) -> Void) {
guard let url = self.getProfileLogin else {
fatalError("Can't find the URL to get a profile!")
}
print("unwrapped url: \(url)")
let semaphore = DispatchSemaphore (value: 0)
var request = URLRequest(url: URL(string: url)!,timeoutInterval: Double.infinity)
request.addValue("bearer \(self.accessToken ?? "")", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.httpMethod = "GET"
print("Request built in getProfile")
print(request)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
print("GetProfile - inside the completion block for the data task...")
if error != nil {
//fatalError("Error: \(String(describing: error))")
print("ERROR-A")
return
}
guard let data = data else {
//fatalError("Error encountered while to get a profile. Error: \(String(describing: error))")
print("ERROR-B")
return
}
print(String(data: data, encoding: .utf8)!)
let getProfile = try? JSONDecoder().decode(GetProfile.self, from: data)
if let results = getProfile {
if results.master == true {
self.getProfileId = results.id
completion(true)
}
} else {
completion(false)
}
semaphore.signal()
}
task.resume()
semaphore.wait()
}
Я вызываю эту функцию из другого контроллера представления следующим образом:
self.userManagementSvc?.pollUserManagementService(completion: { (status) in
guard let status = status else { return }
if status {
self.userManagementSvc?.getProfile(completion: { (status) in
guard let success = status else { return }
if success {
self.userManagementSvc?.loginWithProfile(completion: { (status) in
guard let success = status else { return }
if success, let accessToken = self.userManagementSvc?.accessToken, let refreshToken = self.userManagementSvc?.refreshToken {
self.accessToken = accessToken
self.refreshToken = refreshToken
self.userManagementSvc?.wasFirstTokenCreated = true
self.videoPlayback.userSettings = self.userSettings
DispatchQueue.main.async {
// Assign the access token with a linked profile ID to appData
self.videoPlayback.appData.jwtAccessToken = self.accessToken
self.videoPlayback.startPlaybackWithContent(vidi: self.bmVidi, content: currentContent, accessToken: self.accessToken, refreshToken: self.refreshToken)
}
}
})
}
})
} else {
DispatchQueue.main.async { BMViewControllerManager.shared.getTopViewController()?.dismiss(animated: true) {
let alert = UIAlertController(title: NSLocalizedString("unableToAuthenticateTitle", comment: ""), message: NSLocalizedString("unableToAuthenticateDescription", comment: ""), preferredStyle: .alert)
let okAction = UIAlertAction(title: NSLocalizedString("okButtonTitle", comment: ""), style: .default) { (_) in
DispatchQueue.main.async { BMViewControllerManager.shared.getTopViewController()?.dismiss(animated: true) {} }
}
alert.addAction(okAction)
DispatchQueue.main.async { BMViewControllerManager.shared.getTopViewController()?.present(alert, animated: true) {} }
} }
}
self.userManagementSvc?.pollingIterationsCount = 0
})
Почему не выполняется задача данных?
Пожалуйста, сообщите