2010-03-08 2 views
0

У меня есть tableView, в котором есть ячейки с номерами телефонов. Однако приложение не набирает номера. Смотрите ниже кодПочему мои ссылки «tel:» не работают

- (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]]; 
} 
} 

Консольный поток вывода: 2010-03-08 01:32:30.830 AIB[1217:207] tel:01 8350098

Как вы можете видеть, количество переходит в консоль, но не получает набран. Странная вещь, если я изменить последнее заявление следующим образом:

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

телефон набирает номер 171 без какого-либо вопроса


решение моей конкретной проблемы, как предложено ниже, в удалите пробелы из телефонных номеров. Я добился этого следующим образом:

- (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]]; 
    } 
} 

ответ

5

Вам необходимо будет дезинформировать пользовательский ввод, чтобы он был действительным URL-адресом tel://. В частности, это включает в зачистке:

  • пространств
  • хэшей (#)
  • Звездочки (*)

От iPhone Dev Center:

Чтобы запретить пользователям злонамеренно перенаправляющего телефон звонки или изменение поведение телефона или учетной записи, Приложение телефона поддерживает большинство, , но не всех, специальных символов в телефонной схеме. В частности, если URL содержит символы * или #, приложение телефона не пытается набрать соответствующий номер телефона .

От URLs for URLs for Telephone Calls RFC:

... пространства не должны использоваться в телефоне числа в URL, как символ пробела не могут быть использованы в URL, без избежать этого.

1

У вас не может быть свободного места на номер телефона. Удалите это и повторите попытку.

2

Вам необходимо избегать пробелов, например, NSString's stringByAddingPercentEscapesUsingEncoding: метод.

0

St3fan правильно, вы должны использовать stringByAddingPercentEscapesUsingEncoding перед созданием NSURL экземпляра. iPhone OS делает для вас другую магию. Если вы не будете уклоняться от проблемных символов, то метод URLWithString: вернет ноль.

Смежные вопросы