1

J'essaie d'appeler instantiateViewControllerWithIdentifier de storyboard dans le fil de fond. Mais je le présente sur le fil principal.UIStoryboard instantiateViewControllerWithIdentifier: Pouvons-nous l'appeler en thread d'arrière-plan?

Y at-il un bon moyen de le faire? S'il vous plaît donnez-moi vos suggestions.

Mon code est quelque chose comme ça.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@“some” bundle:nil]; 
    UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@“some”]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.navigationController pushViewController:viewController animated:YES]; 
    }); 
}); 
+0

Toutes UI choses liées devrait se produire dans le thread principal contrôleur afin que les deux vue instancier et de le présenter ne devrait pas se produire dans le fil de fond. – mkeremkeskin

+0

Bienvenue sur [donc]! Veuillez utiliser des blocs de code pour mettre en forme le code. – jpaugh

Répondre

1

C'est une mauvaise idée de faire quoi que ce soit à l'interface utilisateur sur un thread d'arrière-plan. Si vous êtes sur un fil d'arrière-plan et que vous voulez faire un travail sur le thread principal, je vous recommande Grand Central Dispatch (GCD):

dispatch_async(dispatch_get_main_queue(),{ 
    let vc = myStoryboard.instantiateViewControllerWithIdentifier("your-id-here") 
    self.presentViewController(vc, animated: true, completion: nil) 
})