2010-03-08 10 views
0

J'ai une tableView qui a des cellules avec des numéros de téléphone. L'application ne compose pas les chiffres si. Voir le code ci-dessousPourquoi mes liens "tel:" ne fonctionnent-ils pas?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
if (indexPath.section == 2) { 
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSString *numberToDial = [NSString stringWithFormat:@"tel:%@", selectedCell.detailTextLabel.text]; 

    NSLog(@"%@",numberToDial); 

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:numberToDial]]; 
} 
} 

Console ouput: 2010-03-08 01:32:30.830 AIB[1217:207] tel:01 8350098

Comme vous pouvez le voir, le nombre va à la console, mais ne sont pas composé.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:171"]]; 

le téléphone compose le numéro 171 sans aucun problème


La solution à mon problème particulier est, comme suggéré ci-dessous, à: si je change la dernière déclaration à cette chose étrange est, supprimer les espaces des numéros de téléphone. J'ai réalisé ceci comme suit:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section == 2) { 
     UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; 
     NSMutableString *numberToDial = [NSMutableString stringWithFormat:@"tel:%@", selectedCell.detailTextLabel.text]; 

     [numberToDial replaceOccurrencesOfString:@" " 
             withString:@"" 
             options:NSLiteralSearch 
              range:NSMakeRange(0, [numberToDial length])]; 

     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:numberToDial]]; 
    } 
} 

Répondre

5

Vous devez nettoyer l'entrée utilisateur pour qu'elle soit une URL tel:// valide. Plus précisément, cela comprend dépouillant de:

  • espaces
  • HASHES (#)
  • Asterisks (*)

De iPhone Dev Center:

Pour empêcher les utilisateurs de malicieusement téléphone redirigeant appelle ou change le comportement d'un téléphone ou d'un compte, l'application Téléphone prend en charge la plupart, mais pas tous, des caractères spéciaux dans le schéma tel. Plus précisément, si une URL contient les caractères * ou #, l'application Téléphone n'essaie pas de composer le numéro de téléphone correspondant .

De URLs for URLs for Telephone Calls RFC:

... espaces NE DOIT PAS être utilisé dans le téléphone numéros dans les URL que le caractère d'espace ne peut pas être utilisé dans les URL sans échapper.

1

Vous ne pouvez pas avoir d'espace dans le numéro de téléphone. Strip out et essayez à nouveau.

2

Vous devez sortir des espaces avec par exemple NSString méthode stringByAddingPercentEscapesUsingEncoding:.

0

St3fan est juste, vous devez utiliser stringByAddingPercentEscapesUsingEncoding avant de construire NSURL exemple. iPhone OS fait automatiquement d'autres magies pour vous. Si vous n'échapperez pas aux caractères problématiques, la méthode URLWithString: renverra zéro.

Questions connexes