URLWithString: mengembalikan nihil

93

Ini mungkin sangat mudah, tapi sepertinya saya tidak tahu mengapa URLWithString:mengembalikan nol di sini.

//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];
gcamp
sumber
1
Berapa nilai webNamesebelum Anda menelepon stringWithFormat:? Lalu, apa nilai stringURLsebelum panggilan Anda URLWithString:? Gunakan NSLog()untuk mencetaknya selangkah demi selangkah, atau, setel breakpoint dan periksa nilai saat ditetapkan.
Kevin Conner

Jawaban:

203

Anda juga harus melepaskan karakter non-ASCII di URL hardcode Anda:

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

Anda mungkin dapat menghapus pelolosan dari localisationName karena ini akan ditangani oleh pelolosan seluruh string.

gerry3
sumber
Mencoba memahami mengapa URLWithString memberikan nol di sini. Dokumen Apple mengatakan "Harus berupa URL yang sesuai dengan RFC 2396. Metode ini mengurai URLString menurut RFC 1738 dan 1808.". Melakukan beberapa membaca ...
russau
1
LOL, saya menyalin URL dari email dan ini terjadi! Terima kasih.
Eselon
1
rusak jika URL memiliki # di dalamnya. stringByAddingPercentEscapesUsingEncodingmengubah # menjadi% 2
Ali Saeed
3
Di atas API sudah tidak digunakan lagi. Anda dapat menggunakan API berikut webStringURL = [stringURL stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
Rushabh
41

Gunakan Fungsi Ini jika Anda berurusan dengan file yang disimpan di manajer file.

NSURL *_url = [NSURL fileURLWithPath:path];
Islam.Ibrahim
sumber
TERIMA KASIH! Saya mendapatkan url 'dipangkas di tengah'
codrut
8

Saya kira Anda perlu menggunakan -[NSString stringByAddingPercentEscapesUsingEncoding:]. Lihat dokumen Apple .

Komentar lain adalah, sebagai pengatur waktu lama, saya merasa agak tidak nyaman untuk meletakkan karakter non-ASCII di file sumber. Yang mengatakan, dokumen Apple ini mengatakan, mulai dari 10.4, string UTF-16 baik-baik saja di dalamnya @"...". Entah bagaimana GCC tampaknya dengan benar mengubah file sumber dalam bahasa Latin-1 menjadi UTF-16 dalam biner, tetapi saya pikir paling aman menggunakan karakter ASCII 7-bit hanya di dalam kode sumber, dan digunakan NSLocalizedString.

Yuji
sumber
2

Saya pikir karakter beraksen Anda membuang banyak hal; mereka tidak akan ditangani oleh -stringByAddingPercentEscapesUsingEncoding :.

Ben Gottlieb
sumber
2

NSURL URLWithString: @ "" akan mengembalikan nihil jika URL tidak sesuai dengan RFC 2396 dan harus di-escape

Jika Anda membaca rfc2396 di tautan, Anda akan mendapatkan banyak detail

Situs hebat yang saya temukan untuk memeriksa di mana karakter yang menyinggung berada, pilih opsi jalur untuk URL

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

Ryan Heitner
sumber
0

Panggilan URLWithString: akan mengembalikan nil jika string yang diteruskan ke itu dalam format yang salah. Karena NSURL mengembalikan nol untuk url yang salah format, NSLog string Anda dan setel breakpoint untuk melihat dengan tepat apa yang sedang diteruskan ke metode pembuatan NSURL Anda. Jika URLWithString Anda berfungsi dengan nilai hard code, itu adalah bukti lebih lanjut bahwa apa pun yang Anda sampaikan memiliki format yang salah. Lihat

Iggy
sumber
-1

Anda dapat menggunakan NSURL secara langsung tanpa NSString.

//.h file

@interface NewsBrowser : UIViewController {

    UIWebView *webView;
    NSURL *NewsUrl;

}

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

@property(nonatomic,assign)NSURL *NewsUrl;

@end

//.m file

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

Dan saya meneruskan URL dari tampilan lain (menggunakan variabel NewsUrl) ke tampilan ini.

Cobalah.

fady
sumber
Jawaban ini tidak menjawab pertanyaan sama sekali, yang menanyakan mengapa URLWithString: mengembalikan nihil. (Selanjutnya, Anda bahkan tidak menunjukkan cara mengubah string menjadi URL.)
ArtOfWarfare