SendData クラスに次の retrieveData メソッドがあります。このクラスを MovieViewController から呼び出します。このメソッドは、サーバーから取得したデータが正しいかどうかをチェックし、正しい場合は TRUE を返します。そうでない場合は、FALSE を返します。データが「ダウンロード」される前に、メソッドが MovieViewController に戻ることを除いて、問題なく動作します。したがって、コントロールが元のView Controllerに返されるため、メソッドは常にnullであるため、メソッドは常にfalseを返します。
データの読み込みが完了したときにのみ戻る (戻り値を持つメソッドで別名を終了する) にはどうすればよいですか?
ありがとう!
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;
}