2013-04-09 1 views
10

Я думаю, что я не понимаю понятие «baseURL». Это:NSURL baseURL возвращает ноль. Любой другой способ получить фактический базовый URL-адрес

NSLog(@"BASE URL: %@ %@", [NSURL URLWithString:@"http://www.google.es"], [[NSURL URLWithString:@"http://www.google.es"] baseURL]); 

Отпечатки это:

BASE URL: http://www.google.es (null) 

И, конечно же, в Apple docs я прочитал это:

Возвращаемое значение Базовый URL приемника. Если получатель является абсолютным URL-адресом, он возвращает нуль.

Я хотел бы получить из этого примера URL:

https://www.google.es/search?q=uiviewcontroller&aq=f&oq=uiviewcontroller&sourceid=chrome&ie=UTF-8

Этот базовый URL

https://www.google.es

Мой вопрос прост. Есть ли более чистый способ получить фактический базовый URL-адрес без конкатенации схемы и имени хоста? Я имею в виду, какова же цель базового URL-адреса?

+0

Какой результат, точно, что вы ищете? –

+0

К сожалению, я забыл упомянуть об этом: Я хочу, например, с этого URL-адреса: https://www.google.es/#hl=ru&output=search&sclient=psy-ab&q=cats, чтобы получить часть «базового URL» -> https://www.google.es – Lupi

ответ

2

Документы для BaseURL.

baseURL 
Returns the base URL of the receiver. 

- (NSURL *)baseURL 
Return Value 
The base URL of the receiver. If the receiver is an absolute URL, returns nil. 

Availability 
Available in iOS 2.0 and later. 
Declared In 
NSURL.h 

Кажется, он работает только для относительных URL-адресов.

Вы могли бы использовать ...

NSArray *pathComponents = [url pathComponents] 

, а затем взять биты, которые вы хотите.

Или попробовать ...

NSString *host = [url host]; 
24

-baseURL это понятие чисто NSURL/CFURL, а не URL-адресов в целом. Если вы сделали это:

[NSURL URLWithString:@"search?q=uiviewcontroller" 
     relativeToURL:[NSURL URLWithString:@"https://www.google.es/"]]; 

тогда baseURL будет https://www.google.es/. Короче говоря, baseURL заполняется только в том случае, если NSURL создан с использованием метода, который явно передается в базовом URL-адресе. Основная цель этой функции - обрабатывать относительные строки URL-адресов, которые могут быть найдены в источнике типичной веб-страницы.

Вместо этого вы должны принять произвольный URL-адрес и отбросить его только на хост-часть. Самый простой способ я знаю, чтобы сделать это немного хитрости:

NSURL *aURL = [NSURL URLWithString:@"https://www.google.es/search?q=uiviewcontroller"]; 
NSURL *hostURL = [[NSURL URLWithString:@"/" relativeToURL:aURL] absoluteURL]; 

Это даст hostURL из https://www.google.es/

У меня есть такой метод опубликован в -[NSURL ks_hostURL] как часть KSFileUtilities (прокрутите вниз ридми найти это задокументировано)

Если вы хотите чисто хозяина и ничего подобного схеме/порту и т. д., то -[NSURL host] - ваш метод.

+0

Спасибо за это. – KarenAnne

-1

Вот быстрый, легкий и безопасный способ извлечения базового URL:

NSError *regexError = nil; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"http://.*/" options:NSRegularExpressionCaseInsensitive error:&regexError]; 

if (regexError) { 
    NSLog(@"regexError: %@", regexError); 
    return nil; 
} 

NSTextCheckingResult *match = [regex firstMatchInString:url.absoluteString options:0 range:NSMakeRange(0, url.absoluteString.length)]; 

NSString *baseURL = [url.absoluteString substringWithRange:match.range]; 
+1

Как насчет https и других схем? – animaonline

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

  • Нет связанных вопросов^_^