Quel est le meilleur moyen d'afficher une UIAlertView à partir d'un bloc ?
J'ai l'action suivante dans mon code :
- (IBAction)connectWithTwitterClicked:(id)sender {
ACAccountStore * account = [[ACAccountStore alloc]init];
ACAccountType * accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
[account requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error) {
if (granted == YES){
NSLog(@"Le compte Twitter a été accordé");
NSArray * arrayOfAccounts = [account accountsWithAccountType:accountType];
if([arrayOfAccounts count] > 0){
ACAccount * twitterAccount = [arrayOfAccounts lastObject];
NSLog(@"Identifiant Twitter trouvé : [%@]", twitterAccount.username);
// continuer en utilisant l'identifiant Twitter
} else {
// aucun compte Twitter trouvé, affiche une alerte pour notifier l'utilisateur
}
} else{
NSLog(@"Aucun compte Twitter n'a été accordé");
// aucun compte Twitter trouvé, affiche une alerte pour notifier l'utilisateur
}
}];
}
J'ai essayé ces solutions jusqu'à présent :
- Sur l'une des 2 lignes commentées, créer et afficher directement une UIAlertView, cela fait planter l'application, je pense que cela est dû au fait que le bloc est un processus asynchrone et n'a pas accès au thread UI pour afficher l'alerte
- Créer un NSMutableString en dehors du bloc, le marquer avec
__block
, le définir sur les lignes commentées et l'afficher ensuite. Problème similaire ici où le bloc s'exécute de manière asynchrone donc au moment d'afficher l'alerte, il n'y a aucune garantie que le NSMutableString ait été défini.
Quelqu'un peut-il suggérer une solution ? Je veux pouvoir notifier l'utilisateur d'une manière ou d'une autre afin qu'il puisse soit ne pas utiliser Twitter, soit aller configurer un compte dans les paramètres de l'appareil.
Merci