2013-04-09 11 views
10

Tôi nghĩ rằng tôi không hiểu khái niệm về "baseURL". Đây:NSURL baseURL trả lại không. Bất kỳ cách nào khác để lấy URL cơ sở thực tế

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

Prints này:

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

Và dĩ nhiên, trong Apple docs tôi đọc này:

Return Value URL cơ sở của người nhận. Nếu người nhận là một URL tuyệt đối, trả về số không.

Tôi muốn nhận được từ ví dụ URL này:

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

cơ sở này URL

https://www.google.es

Câu hỏi của tôi rất đơn giản. Có cách nào sạch hơn để lấy URL cơ sở thực sự mà không cần ghép nối sơ đồ và tên máy chủ không? Ý tôi là, mục đích của URL cơ bản là gì?

+0

kết quả gì, chính xác, Bạn đang tìm kiếm? –

+0

Xin lỗi, tôi quên đề cập rằng: Tôi muốn từ URL này ví dụ: https://www.google.es/#hl=vi&output=search&sclient=psy-ab&q=cats để nhận phần "URL cơ sở" -> https://www.google.es – Lupi

Trả lời

2

Tài liệu cho 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 

Dường như nó chỉ hoạt động cho các URL tương đối.

Bạn có thể có thể sử dụng ...

NSArray *pathComponents = [url pathComponents] 

và sau đó đi các bit mà bạn muốn.

Hoặc thử ...

NSString *host = [url host]; 
24

-baseURL là một khái niệm thuần túy của NSURL/CFURL chứ không phải là URL nói chung. Nếu bạn đã thực hiện điều này:

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

sau đó baseURL sẽ là https://www.google.es/. Tóm lại, baseURL chỉ được điền nếu số NSURL được tạo bằng cách sử dụng phương thức chuyển rõ ràng trong URL cơ sở. Mục đích chính của tính năng này là xử lý các chuỗi URL tương đối như có thể được tìm thấy trong nguồn của một trang web điển hình.

Những gì bạn đang thay thế, là lấy một URL tùy ý và xóa nó trở lại chỉ phần lưu trữ. Cách đơn giản nhất mà tôi biết để làm điều này là một xảo quyệt nhỏ:

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

này sẽ cung cấp một hostURL của https://www.google.es/

Tôi có một phương pháp như vậy được công bố như -[NSURL ks_hostURL] như một phần của KSFileUtilities (di chuyển xuống readme để tìm tài liệu)

Nếu bạn muốn hoàn toàn là máy chủ và không phải bất cứ thứ gì như lược đồ/cổng, v.v. thì -[NSURL host] là phương pháp của bạn.

+0

Cảm ơn vì điều này. – KarenAnne

-1

Dưới đây là một cách nhanh chóng, dễ dàng và an toàn để lấy URL cơ sở:

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

Điều gì về https và các chương trình khác? – animaonline