2015-01-21 55 views
1

NSURLURLByAppendingPathExtension:似乎不適合我。我正在嘗試將路徑添加到現有網址的末尾。例如:NSURL「URLByAppendingPathExtension:」bug?

[[NSURL URLWithString:@"https://www.example.com"] URLByAppendingPathExtension:@"/10392983/example"] 

應與http://www.example.com/10392983/example根據documentation被返回一個URL。相反,它正在逃避斜線。我可以實現將相同的結果轉換爲絕對字符串的URL並使用常規的NSString操作,但上面的代碼看起來會更加優雅。任何關於使用哪種NSURL方法來實現這個結果的想法,或者這真的是一個錯誤?

回答

4

對於你正在嘗試做的,你應該使用:

URLByAppendingPathComponent 

根據該文檔,URLByAppendingPathExtension對於像HTML擴展。這是一個有點模糊,但是從文檔:

如果原始URL與一個或多個斜線結束,這些都是 從返回的URL中移除。在新URL的兩個 部分之間插入一個句點。

這讓我覺得這隻應該用於將諸如.html和.php之類的東西附加到URL。改用URLByAppendingPathComponent

4

NSURL可能會變得混亂和怪異。

URLByAppendingPathExtension文檔說:

「如果原來的URL與一個或多個斜槓,這些都是從返回的URL刪除的時段被插入新的URL的兩個部分之間結束」 「

」從返回的URL中刪除「意味着這些'/'正斜槓字符將被其轉義對應字符替換(即正斜槓的%符號)。

從@ scott的答案UrlByAppendingPathComponent似乎不工作在我的測試?該方法需要用大寫的'URL'拼寫'URLByAppendingPathComponent',而不是小寫的'Url'。

試試這個:

[NSURL URLWithString:[@"https://www.example.com" stringByAppendingPathComponent:@"/10392983/example"]] 

將產生NSURL與優雅的複雜性類似的水平。你也可以使用任何數量的「stringByAppendingPathComponent」方法來產生你的NSURL。

相反這裏的上述斯科特的代碼示例:

NSURL*combined = [baseURL URLByAppendingPathComponent: stringPath]; 
+0

的事情是,我使用的URL,不想做轉換來回的NSString之間。我有一個「基本URL」(https://www.example.com),上面的代碼需要轉換爲NSString,我希望能夠在不增加複雜性的情況下從URL創建新的URL。另外,在我的例子中,你提到「如果URL以一個或多個正斜槓結尾」,並且在我的測試中,它並沒有以任何正斜線結束。 – nmock 2015-01-21 04:25:22

+0

您的原始代碼需要兩個字符串作爲輸入,答案需要兩個字符串作爲輸入。我的建議使用與原始答案相同數量的字符串,並生成一個NSURL。我的意思是如果你不想使用字符串,那麼你不應該使用[NSURL URLWithString:@「」]。實際上沒有任何方法可以讓你創建一個NSURL而無需先給它提供某種字符串。你可以試試:NSURL * first = [NSURL URLWithString:@「https://www.example.com」]; NSURL * second = [first URLByAppendingPathComponent:@「/ 10392983/example」]; – yvanscher 2015-01-21 04:36:36

+0

爲了舉例,我包含了兩個字符串,但NSURL正在生成。我的觀點是,我試圖操縱一個NSURL對象。 – nmock 2015-01-21 04:39:34