У меня есть следующий метод retrieveData в моем классе SendData. Я называю этот класс из моего MovieViewController. Метод проверяет правильность данных, полученных с сервера, если он есть, он возвращает TRUE. Если это не так, он возвращает FALSE. Он отлично работает, за исключением того, что метод возвращается в мой MovieViewController, прежде чем данные успеют «загрузить». Следовательно, метод всегда возвращает false, потому что он всегда равен нулю, потому что управление возвращается в исходный контроллер представления.Извлечь данные NSURL при загрузке
Как вернуть (выход AKA с помощью метода с возвращаемым значением) только после того, как данные закончили загрузку, а не раньше?
Спасибо!
SendData.m
-(BOOL)retrieveData:(NSString *) postID:(NSString *) message:(NSString *)token
{
__block BOOL value=FALSE;
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfiguration.HTTPAdditionalHeaders = @{
@"message" : message,
@"access_token": token
};
postID=[NSString stringWithFormat:@"https://graph.facebook.com/%@/comments?message=%@&access_token=%@",postID,message,token];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:postID]];
request.HTTPMethod = @"POST";
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//THIS NEEDS TO BE EXECUTED BEFORE THE METHOD IS RETURNED
BOOL valid;
NSString* myString;
myString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"MY string is %@", myString);
if (myString != NULL || [myString length] != 0)
{
valid = TRUE;
}
else
{
valid = FALSE;
}
value=valid;
}];
return value;
}
Спасибо Аркадиусу! Просто интересно, я читал, что выступление на главной теме - не очень хорошая идея. Вы согласны? – Teddy13
Конечно. Выполнение этого в фоновом потоке требует пересмотра вашей архитектуры. С моими изменениями вы узнаете, удалось ли выполнить запрос только тогда, когда вызывается 'dataDownloaded:'. Но это, безусловно, было бы лучше с точки зрения пользователя. –
Вижу, спасибо. Один из последних вопросов, я довольно новичок в iOS dev (я студент), вызывает performSelectorInBackground, как это сделать? Благодаря! – Teddy13