Я использую завершение для всех своих методов, чтобы гарантировать, что поток выполнения контролируется. Однако в очень странном случае это, похоже, не применяется. В TableViewController (TVC), когда пользователь нажимает на строку, в didSelectRowAtIndexPath, я извлекаю информацию о пользователе, а затем проверяю другой метод для условия. За исключением запуска загрузки, но до его завершения происходит метод проверки. Как это может произойти? и как я могу это исправить?Swift - Методы не работают
Вот код в didSelectRowAtIndexPath:
self.getFriendObjectDataFromBackend(self.notificationObject.from!, completion: { (result)->Void in
if(result.domain == "")
{
print(self.friendObject.name)
self.checkIfRequestAlreadyAccepted({ (result)->Void in
if(result == true)
{
...
}
})
}
})
для getFriendObjectDataFromBackend (..):
func getFriendObjectDataFromBackend(toUser:String, completion:(result:NSError) -> Void)
{
.....
}
и checkIfRequestAlreadyAccepted (..):
func checkIfRequestAlreadyAccepted(completion: (result:Bool) -> Void)
{
.....
}
Ошибка быть запускается в checkIfRequestAlreadyAccepted, где я полагаюсь на использование значения глобального варианта способный установить getFriendObjectDataFromBackend.
Заранее благодарим за помощь.
Обновление: Добавлен код для getFriendObjectDataFromBackend:
func getFriendObjectDataFromBackend(toUser:String, completion:(result:NSError) -> Void)
{
var errorFound:NSError = NSError(domain: "", code: 0, userInfo: nil)
let query: PFQuery = PFQuery(className: "_User")
query.whereKey("appUsername", equalTo: toUser)
query.findObjectsInBackgroundWithBlock {
(objects:[PFObject]?, error:NSError?) -> Void in
if(error == nil)
{
completion(result: errorFound)
self.friendObject.username = objects![0]["appUsername"] as? String
self.friendObject.name = objects![0]["appUsername"] as? String
}else{
errorFound = error!
completion(result: errorFound)
}
}
}
Вы можете написать код для 'getFriendObjectDataFromBackend'? Код внутри этого будет определять, когда вызывается функция завершения и что может происходить в то же время. – Putz1103
@ Putz1103 обновил сообщение :) –
Вы вызываете 'завершение (result: errorFound)' * before *, вы устанавливаете глобальные значения на 'self.friendObject' – Paulw11