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

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.


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

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.


2

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



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


-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.


Jawaban ini tidak menjawab pertanyaan sama sekali, yang menanyakan mengapa URLWithString: mengembalikan nihil. (Selanjutnya, Anda bahkan tidak menunjukkan cara mengubah string menjadi URL.)
ArtOfWarfare
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.