다음은 내가 수행하는 작업입니다. 이후에 데이터를 조작해야하는 로그인을 처리하고 새로운보기를 시작합니다. 서버가 항상 즉각적으로 응답하지 않기 때문에 비동기 요청을하고 싶습니다. (동기 연결로 메인 스레드를 유지했기 때문에 충돌을 원하지 않습니다)비동기 요청을 호출하지만 Objective-C에서 응답을 기다리는 추가 코드가있는 방법
이것은 현재 모양입니다 :
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *dataReturn, NSData *data, NSError *error)
{
//blah blah working code
//once data is received, it's processed and I want to call a new view
viewController.hidesBottomBarWhenPushed = YES;
viewController.name = returnUserData[0];
viewController.userID = returnUserData[1];
viewController.role = returnUserData[2];
viewController.sID = returnUserData[3];
[self.navigationController pushViewController:viewController animated:YES];
NSLog(@"Pushed new view controller.");//*/
}];//end async request
내 문제는 실제로 시각적으로보기를 밀고 있지 않다는 것입니다. 내 NSLog 응답이 올바르게 작동하는 것을 볼 수 있습니다. 새 뷰는 "Hello, [name]"으로 즉시 응답하지만 시각적으로 아무것도 표시되지 않습니다. 이것은 문제입니다. 그래서
NSLog(@"init NSURL response");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"Begin async request");
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *dataReturn, NSData *data, NSError *error)
{
NSLog(@"inside async");
if (error)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"There was an error communicating with the server. Please try again." delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[alert show];
[alert release];
checkField.text = @"";
}
else
{
//NSLog(@"raw: %@ - filtered: %@",dataReturn, (NSString *)dataReturn);
NSDictionary *response = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
rawJSONData = [response objectForKey:@"d"];
NSLog(@"Set jsondata");
}
NSLog(@"ended async");
}];//end async request
NSLog(@"Beginning main thread work");
dispatch_sync(dispatch_get_main_queue(), ^{
//not important for the example
:하지만 괜찮아요
는, 내가 대신이 내가 온라인으로 게시 봤어요의 적응 코드를 분리하고 주 스레드
에서 뷰 전환을 실행하려고하기로 결정 [: 60B 652] 초기화 NSURL 응답
2014년 3월 28일 21 : 53 : 37.059을 myApp [652
2014년 3월 28일 21 : : : (53) 37.059을 myApp 무엇을하고있는 것은 저에게이를주고있다 : 53 : 3507] 비동기 요청을
2014년 3월 28일 (21)을 시작 37.059을 myApp [652 : 3507]을 메인 스레드 작업부터 그것은 완전히 포함 된 비동기 요청을 건너 뛰는 것
. 그래서 남아있는 무슨
내가 원하는 일을하지 않는 두 개의 오프 - 더 - 메인 스레드 솔루션입니다 : 내가 메인 스레드 떨어져있는 NSURLConnection를 실행하려면, 내가 JSON을 다시 받고 있어요 데이터를 구문 분석해야하는데, &이 뷰를 전환하기 전에 해당 데이터를 구문 분석 할 때까지 기다리고 싶습니다.
가능한 작업을하려고합니까? 아니면 내 눈은 윤이 나고 내가해야 할 일이 보이지 않는가?