2009-12-30 142 views
87

它可能很容易,但我似乎沒有找到爲什麼URLWithString:返回零這裏。URLWithString:返回零

//localisationName is a arbitrary string here 
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false&key=", webName]; 
NSURL* url = [NSURL URLWithString:stringURL]; 
+1

是什麼在調用'stringWithFormat:'之前'webName'的值? 然後,在調用'URLWithString:'之前'stringURL'的值是多少? 使用'NSLog()'將它們一步一步地打印出來,或者設置斷點並檢查它們設置的值。 – 2009-12-30 17:38:30

回答

189

你需要逃避非ASCII字符在您的硬編碼的網址,以及:

//localisationName is a arbitrary string here 
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false", webName]; 
NSString* webStringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL* url = [NSURL URLWithString:webStringURL]; 

你或許可以去除localisationName的轉義,因爲它會被整個字符串轉義處理。

+0

Thnx其工作正常......... – 2011-04-05 04:36:58

+0

其工作....好 – Akshay 2013-11-08 10:49:22

+0

試圖瞭解爲什麼URLWithString在這裏給零。 Apple文檔說「必須是符合RFC 2396的URL」。該方法根據RFC 1738和1808解析URLString。「做一些閱讀... – russau 2014-02-02 16:19:36

8

我想你需要使用-[NSString stringByAddingPercentEscapesUsingEncoding:]。請參閱Apple doc

另一個意見是,作爲一個老計時器,我覺得把非ASCII字符放在源文件中有點不安。 這就是說,這個Apple doc表示,從10.4開始,在@"..."裏面的UTF-16字符串可以。 不知何故,GCC似乎正確地將Latin-1中的源文件轉換爲二進制文件中的UTF-16,但我認爲只在源代碼中使用 7位ASCII字符並且使用NSLocalizedString是最安全的。

2

我覺得你的重音字符扔東西了;他們不會被-stringByAddingPercentEscapesUsingEncoding處理。

0

如果傳遞給它的字符串格式不正確,則URLWithString:call將返回nil。 由於NSURL爲錯誤的URL返回nil,因此請NSLog記錄您的字符串並設置斷點以準確查看傳遞給您的NSURL創建方法的內容。如果你的URLWithString與一個硬編碼值一起工作,這進一步證明了你傳遞的任何東西都是畸形的。 see

0

您可以直接使用NSURL而不使用NSString。

//.h文件

@interface NewsBrowser : UIViewController { 

    UIWebView *webView; 
    NSURL *NewsUrl; 

} 

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

@property(nonatomic,assign)NSURL *NewsUrl; 

@end 

//.m文件

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

和I(使用NewsUrl變量)將URL傳遞從另一視圖這種觀點。

試試吧。

+0

這個答案沒有解決的問題可言,這是問爲什麼URLWithString:返航爲零。 (此外,您甚至沒有顯示將字符串更改爲URL的方式。) – ArtOfWarfare 2013-04-13 00:27:58

37

如果您處理保存在文件管理器上的文件,請使用此功能。

+0

感謝那就是我一直在尋找的東西。 – user1258240 2014-03-23 21:15:31

+0

這也適用於我 – ekscrypto 2014-04-22 14:07:10

+0

這是一個優秀和簡潔的解決方案,謝謝! – ThinkBonobo 2014-05-19 21:24:11

2

NSURL URLWithString:@「」將返回nil,如果網址不符合RFC 2396,如果你通過在鏈接rfc2396讀,你會得到的細節

負荷因此必須轉義

一個偉大的網站,我發現這裏檢查有問題的字符,選擇URL路徑選擇

http://www.websitedev.de/temp/rfc2396-check.html.gz