Метод openURL работает со строкой, но не с переменной, содержащей ту же строку

#ios #objective-c

#iOS #objective-c

Вопрос:

Редактировать: я понял, что было не так, но пока не могу опубликовать ответ, поскольку я новый пользователь. Я опубликую свое решение, как только смогу.

Я использую этот код для открытия ссылки в веб-браузере iPhone:

 NSString *url;
NSLog(@"%d", [sender tag]);
if([sender tag] == 0) 
    url = [approvedDict objectForKey:@"ig"];
else if([sender tag] == 1) 
    url = [approvedDict objectForKey:@"yt"];
else if([sender tag] == 2) 
    url = [approvedDict objectForKey:@"tw"];
else if([sender tag] == 3) 
    url = [approvedDict objectForKey:@"pt"];
else if([sender tag] == 4) 
    url = [approvedDict objectForKey:@"fb"];
NSLog(@"%@", url);
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: url]];
  

При использовании этого кода (который является целевым действием нажатия кнопки) ничего не происходит. Однако, если я беру ТОЧНУЮ строку, заданную NSLog (@»%@», url), и помещаю ее туда, где «url» находится в последней строке, это работает. Я в тупике относительно того, что происходит; у кого-нибудь есть какие-либо подсказки? Спасибо.

Комментарии:

1. Так ли это для всех значений url (из вашего approvedDict )?

2. Да — все эти ключи являются ссылками на строки, которые являются ссылками.

3. Как мы можем помочь, не зная, что url содержит строка?

4. @"google.com" не является URL-адресом. Это строка, которая выглядит как имя домена. Допустимый URL-адрес будет @"http://google.com" .

5. Ваше описание слишком расплывчато. Опубликуйте фактический блок кода с определенным URL-адресом в переменной, которая не загружается.

Ответ №1:

Если URL-адрес содержит какие-либо специальные символы, вам нужно их экранировать в процентах.

Вместо того, чтобы просто открывать URL-адрес следующим образом:

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString: url]];
  

Добавить

 NSString *encodedString = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *urlToOpen = [NSURL URLWithString: encodedString];
[[UIApplication sharedApplication] openURL:urlToOpen];
  

Комментарии:

1. Веб-браузер открывается сейчас, но Safari никогда не сможет подключиться к серверу. Может быть, есть еще один шаг?

2. Я не знаю, можете ли вы получить ответ о том, что Safari не удалось открыть ссылку или нет. Вы уверены, что если вы откроете тот же URL вручную (например, Safari на вашем Mac), это сработает?