У меня есть for/in
петлю следующим образом:только продолжать цикл, если метод закончил
for(NSString *paymentId in success){
[self getPaymentDetails:paymentId];
}
Метод getPaymentDetails
является асинхронным. Как создать блок завершения, чтобы продолжить цикл for/in, если метод закончен?
- детали
Метод getPaymentDetails
выглядит следующим образом:
-(void)getPaymentDetails:(NSString *)paymentId{
PFUser *currentUser = [PFUser currentUser];
[PFCloud callFunctionInBackground:@"getpaymentdetails"
withParameters:@{@"objectid": paymentId, @"userid": currentUser.objectId}
block:^(NSDictionary *success, NSError *error) {
if(success){
NSDictionary *payment = success;
NSString *amount = [payment objectForKey:@"amount"];
if (![amount isKindOfClass:[NSNull class]]) {
[self.amountArray addObject:amount];
}
else {
[self.amountArray addObject:@""];
}
NSString *currency = [payment objectForKey:@"currency"];
if (![currency isKindOfClass:[NSNull class]]) {
[self.currencyArray addObject:currency];
}
else {
[self.currencyArray addObject:@""];
}
[self.tableView reloadData];
} else{
NSLog(@"Error logged getpaymentdetails: %@", error);
}
}];
}
Определение «законченный» Настоящим определяется, когда сумма, а также валюта хранилась в массиве , Или, другими словами: когда кодовый блок достиг конца метода для этого конкретного paymentId
Метод getPaymentDetails изменяет некоторую переменную? В этом случае вы можете поместить время (myVar == nil) {// empty}^{YourBlockHere} myVar = nil – Draelach
@iZabala Тесная петля петли в любом потоке - плохая идея. Это особенно плохо на основной теме – Paulw11
Нет общего определения того, когда асинхронный метод «завершен». Это полностью зависит от того, что делает этот метод, и того, что вы хотели бы «заполнить». При отсутствии каких-либо подробностей самым простым ответом является изменение синхронности 'getPaymentDetails' и перемещение этого цикла с основного потока. –