当前位置: 动力学知识库 > 问答 > 编程问答 >

ios - UINavigationController taking time to push ViewController

问题描述:

Take the following code:

[[[Resource alloc] init] get:@"/api/v1/basic_user/40/" params:nil completion:^(NSURLResponse *response, NSDictionary *data, NSError *connectionError) {

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];

HomeViewController *homeView = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];

NSLog(@"pushing...");

[self.navigationController pushViewController:homeView animated:YES];

}];

This prints "pushing" and after about 10(not precisely) seconds my HomeViewController appears.

The initWithCoder(the ViewController is instantiated from the Storyboard) has absolutely nothing. And that gets called just right after I push my VC.

But my viewDidLoad method is taking seconds to load. I can't tell how many seconds because it's not exact. It sometimes doesn't load at all! (e.g. my HomeViewController does not show up.

Here's the trickier part. If I move my push method outside my block everything works like a charm.

What's going on? Why is my VC so slow when inside the block?

EDIT:

The only thing that uses thread when the method in my resource is called is the code below:

[NSURLConnection sendAsynchronousRequest:_request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError){

NSLog(@"%@", [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil] description]);

[self toggleNetworkActivityIndicator];

_lastResponse = response;

success(response, data, connectionError);

}];

网友答案:

The only thing I can think of is whatever your doing in your resources method is on another thread through dispatch. So try wrapping your push view controller in a grand central dispatch back to the main queue like the following code:

dispatch_async(dispatch_get_main_queue(), ^{
    // Push view controller here
}); 

This has solved some issues were when I was performing animations it would take 5-10 seconds to do something that usually only took about a half a second. Hope this helps.

分享给朋友:
您可能感兴趣的文章:
随机阅读: