AFNetworking API를 사용하여 JSON 데이터를 반환하는 사용자 지정 메서드를 만들었습니다.AFNetworking Array는 블록 내부에서 JSON을 반환하지만 블록 외부에서는 반환하지 않습니다.
내 웹 서비스에서 가져온 데이터를 JSON으로 배열에 저장하려고합니다. NSLog (@ "% @", json); 블록 내부에서 JSON 데이터를 콘솔에 인쇄합니다. 블록 외부 NSLog (@ "% @", json); null를 돌려줍니다. 왜 이것이 고, 어떻게 고칠 수 있습니까? 내가 할 노력하고있어
는 JSON 데이터를 반환하는 방법 (NSArray를)
#import "WebService.h"
#import "AFNetworking.h"
#import "MBProgressHUD.h"
@implementation WebService
- (NSArray *)postRequest:(NSDictionary *)postParameters {
//MBProgressHUD *progressHUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
//progressHUD.labelText = @"Loading";
__block NSArray *json;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:@"http://192.168.0.100/app.php" parameters:postParameters success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSString *responseString = [operation responseString];
NSError *error;
json = [NSJSONSerialization
JSONObjectWithData:[responseString dataUsingEncoding:NSUTF8StringEncoding]
options:kNilOptions
error:&error];
NSLog(@"%@", json); // RETURNS JSON
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Network Unavailable"
message:@"Unable to contact server. Please try again later."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
NSLog(@"Error: %@", error);
}];
NSLog(@"%@", json); // RETURNS NULL
return json;
}
@end
어떻게 작동하는지 알 수 있습니다. 내가 뭘 하려는지 JSON 데이터 (NSArray) 반환하는 메서드를 얻는 것입니다. – user2920762
@ user2920762 알아 두십시오. 하지만 우리가 모두 당신에게 말하려고하는 것은 당신이 그렇게해서는 안된다는 것입니다. 메인 큐가 네트워크 요청을 기다리는 것을 결코 원하지 않습니다 (메인 큐를 차단하지 마십시오). JSON 객체를 반환하는'postRequest'를 만드는 유일한 방법은 메인 큐를 차단하고 동기식으로 동작시키는 것입니다. 모든 다양한 대답과 같은 비동기 패턴을 사용하십시오. – Rob
작은 메모 : AFNetworking이 완료 스레드가 주 스레드에서 호출되도록 보장하므로 주 대기열로 디스패치하지 않아도됩니다. –