Как подготовить NSURL от международных символов NSString?

Мне нужно получить доступ к веб-серверу с помощью GET с международными символами (иврит в моем случае, но может быть любым). Поэтому я делаю NSString просто отлично, но

[NSURL URLWithString:urlString]; // returns nil.

Я понимаю, что мне, вероятно, придется преобразовать международные символы в процентные коды.

Есть ли встроенный метод в Objective-c для этого?

Ответ 1

Да, вам нужен метод -stringByAddingPercentEscapesUsingEncoding::

[NSURL URLWithString:[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

Ответ 2

Это обеспечило бы, что NSURL *url не возвращает nil из-за "|" в urlString.

NSString *urlString = [[NSString stringWithFormat:@"http://api.service.com/Service.svc?sort=name|ascending"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString];

Ответ 3

Вы можете использовать NSURL напрямую без NSString:

//.h file

@interface NewsBrowser : UIViewController {
    UIWebView *webView;
    NSURL *NewsUrl;
}

@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property (nonatomic, assign) NSURL *NewsUrl;

@end

//.m file

[webView loadRequest:[NSURLRequest requestWithURL:NewsUrl]];

Просто передайте NSURL из другого представления (используя переменную NewsUrl) в это представление.

Ответ 4

+ (NSURL*) URLWithStringWithSpecialChars:(NSString *)sURL
{
    NSURL *url = [NSURL URLWithString:sURL];
    if(url == nil)
        return [NSURL URLWithString:[sURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    else
        return url;
}

вызов этой функции вместо URLWithString: должен гарантировать, что действительный NSURL всегда возвращается (вместо нулевого значения)