URLWithString: nil döndürür


93

çok kolay olabilir, ama URLWithString:burada neden sıfır döndüğünü bulamadım .

//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
webNameAramadan önce ne değeri var stringWithFormat:? Öyleyse, stringURLaramadan önce değeri URLWithString:nedir? NSLog()Bunları adım adım yazdırmak için kullanın veya kesme noktaları ayarlayın ve ayarlandıkça değerleri inceleyin.
Kevin Conner

Yanıtlar:


203

Kodlanmış URL'nizdeki ASCII olmayan karakterlerden de çıkış yapmanız gerekir:

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

Tüm dizenin kaçışıyla ele alınacağından, muhtemelen localisationName'in kaçışını kaldırabilirsiniz.


URLWithString'in neden burada sıfır verdiğini anlamaya çalışıyorum. Apple dokümanları "RFC 2396'ya uyan bir URL olmalıdır. Bu yöntem URLString'i RFC'ler 1738 ve 1808'e göre ayrıştırır." Biraz kitap okumak ...
russau

1
LOL, bir e-postadan bir URL kopyaladım ve bu oldu! Teşekkürler.
Echelon

1
URL'de # varsa kesilir. stringByAddingPercentEscapesUsingEncoding# değerini% 2'ye dönüştürür
Ali Saeed

3
Yukarıdaki API kullanımdan kaldırılmıştır. Aşağıdaki API'yi kullanabilirsiniz webStringURL = [stringURL stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
Rushabh

41

Dosya yöneticisine kaydedilen dosyayla ilgileniyorsanız, Bu İşlevi kullanın.

NSURL *_url = [NSURL fileURLWithPath:path];

TEŞEKKÜR EDERİM! 'Ortadan kırpılmış' bir url
alıyordum

8

Sanırım kullanmanız gerekiyor -[NSString stringByAddingPercentEscapesUsingEncoding:]. Apple belgesine bakın .

Başka bir yorum da, eski bir zamanlayıcı olarak, ASCII olmayan karakterleri bir kaynak dosyaya koymayı biraz tedirgin buluyorum. Bununla birlikte, bu Apple dokümanı , 10.4'ten başlayarak UTF-16 dizelerinin içinde iyi olduğunu söylüyor @"...". Her nasılsa GCC, Latin-1'deki kaynak dosyayı ikili dosyada UTF-16'ya doğru şekilde dönüştürüyor gibi görünüyor, ancak 7-bit ASCII karakterlerini yalnızca kaynak kodunun içinde kullanmak ve kullanmak en güvenli yoldur NSLocalizedString.


2

Sanırım aksanlı karakterleriniz bir şeyleri atıyor; -stringByAddingPercentEscapesUsingEncoding: tarafından işlenmezler.


2

NSURL URLWithString: @ "", URL RFC 2396'ya uymuyorsa ve bunların öncelenmesi gerekiyorsa sıfır döndürür

Eğer aracılığıyla okursanız RFC2396 linkinde size detayların yükleri alacak

Rahatsız edici karakterin nerede olduğunu kontrol etmek için bulduğum harika bir site, URL için yol seçeneğini seçin

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


0

URLWithString: çağrısı, kendisine iletilen dizge hatalı biçimlendirilmişse bir sıfır döndürür. NSURL, hatalı biçimlendirilmiş url'ler için nil döndürdüğünden, dizenizi NSLogleyin ve NSURL oluşturma yönteminize tam olarak neyin geçirildiğini görmek için kesme noktaları ayarlayın. URLWithString'iniz sabit kodlanmış bir değerle çalışıyorsa, bu, ilettiğiniz her şeyin yanlış biçimlendirilmiş olduğunun bir başka kanıtıdır. görmek


-1

NSURL'yi NSString olmadan doğrudan kullanabilirsiniz.

//.h dosyası

@interface NewsBrowser : UIViewController {

    UIWebView *webView;
    NSURL *NewsUrl;

}

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

@property(nonatomic,assign)NSURL *NewsUrl;

@end

//.m dosyası

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

Ve URL'yi başka bir görünümden (NewsUrl değişkenini kullanarak) bu görünüme geçiriyorum.

Dene.


Bu cevap soruyu hiç ele almadı, bu da URLWithString'in neden sıfır döndürdüğünü soruyordu. (Ayrıca, bir dizeyi URL olarak değiştirmenin bir yolunu bile göstermediniz.)
ArtOfWarfare
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.