这就是我正在做的事情:我正在处理一个登录,该登录需要之后操作数据,然后触发一个新视图。我想做一个异步请求,因为服务器并不总是立即响应(我不希望崩溃,因为我用同步连接阻止了主线程)
这就是它现在的样子:
[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
所以它正在做的是给我这个:
2014-03-28 21:53:37.059 myApp [652:60b] 初始化 NSURL 响应
2014-03-28 21:53:37.059 myApp [652:3507] 开始异步请求
2014-03-28 21:53:37.059 myApp[652:3507] 开始主线程工作
它完全跳过了嵌入式异步请求。
所以我剩下的是两个脱离主线程的解决方案,它们没有做我想要的: 我想从主线程运行 NSURLConnection,我正在取回我需要解析的 JSON 数据,并且我想等到在转换视图之前获得并解析该数据。
这是我试图做的可能吗?或者我的眼睛是呆滞的,我只是没有看到我应该看到的东西?