web-dev-qa-db-ja.com

URLWithString:nilを返します

それは非常に簡単かもしれませんが、なぜURLWithString:ここにnilを返します。

//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];
90
gcamp

ハードコードされたURLの非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のエスケープを削除できます。

200
gerry3

ファイルマネージャに保存されたファイルを扱う場合は、この関数を使用します。

NSURL *_url = [NSURL fileURLWithPath:path];
39
Islam.Ibrahim

-[NSString stringByAddingPercentEscapesUsingEncoding:]を使用する必要があると思います。 Apple doc を参照してください。

もう1つのコメントは、古いタイマーとして、ソースファイルに非ASCII文字を入れるのは少し不安だということです。とは言っても、この Apple doc は10.4以降、UTF-16文字列は@"..."内で問題ありません。どういうわけかGCCはLatin-1のソースファイルをバイナリでUTF-16に正しく変換するようですが、7ビットASCII文字をソースコード内でのみ使用するのが最も安全だと思いますNSLocalizedString

8
Yuji

あなたのアクセントのついたキャラクターは物を投げ捨てていると思います。それらは-stringByAddingPercentEscapesUsingEncoding:によって処理されません。

2
Ben Gottlieb

URLがRFC 2396に準拠しておらず、エスケープする必要がある場合、NSURL URLWithString:@ ""はnilを返します。

リンクで rfc2396 を読み通すと、詳細な情報を取得できます。

問題のある文字がどこにあるかを確認するために見つけた素晴らしいサイト、URLのパスオプションを選択してください

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

2
Ryan Heitner

URLWithString:呼び出しは、渡された文字列の形式が正しくない場合、nilを返します。 NSURLは、不正な形式のURLに対してnilを返すため、文字列をNSLogし、ブレークポイントを設定して、NSURL作成メソッドに渡されるものを正確に確認します。 URLWithStringがハードコードされた値で機能する場合、それは、渡すものが不正であることのさらなる証拠です。 see

0
Iggy