URLWithString: शून्य लौटाता है


93

यह बहुत आसान हो सकता है, लेकिन मुझे यह पता नहीं लगता है कि 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
webNameआपके कॉल करने से पहले का मूल्य क्या है stringWithFormat:? फिर, stringURLआपके कॉल करने से पहले का मूल्य क्या है URLWithString:? NSLog()उन्हें चरण दर चरण प्रिंट करने के लिए उपयोग करें , या, ब्रेकपॉइंट सेट करें और मान सेट किए जाने पर निरीक्षण करें।
केविन कोनर

जवाबों:


203

आपको अपने हार्डककोड 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];

आप शायद स्थानीयकरण के भागने को हटा सकते हैं क्योंकि यह पूरे स्ट्रिंग के भागने से नियंत्रित होगा।


URLWithString यहाँ शून्य क्यों दे रहा है, यह समझने की कोशिश कर रहा है। Apple डॉक्स का कहना है "RFC 2396 के अनुरूप एक URL होना चाहिए। यह विधि RFCs 1738 और 1808 के अनुसार URLString को पार्स करती है।" कुछ पढ़ते हुए ...
russau

1
LOL, मैंने एक ईमेल से एक URL कॉपी किया और यह हुआ! धन्यवाद।
इलिनान

1
टूट जाता है अगर URL में एक # है। stringByAddingPercentEscapesUsingEncodingधर्मान्तरित # # 2%
अली सईद

3
ऊपर एपीआई अपग्रेड किया गया है। आप निम्नलिखित एपीआई का उपयोग कर सकते हैंwebStringURL = [stringURL stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
रुषभ

41

यदि आप फ़ाइल प्रबंधक पर सहेजे गए फ़ाइल से निपटते हैं तो इस फ़ंक्शन का उपयोग करें।

NSURL *_url = [NSURL fileURLWithPath:path];

धन्यवाद! मैं
कोडरूट

8

मुझे लगता है कि आपको उपयोग करने की आवश्यकता है -[NSString stringByAddingPercentEscapesUsingEncoding:]। देखें एप्पल डॉक

एक और टिप्पणी यह ​​है कि, एक पुराने टाइमर के रूप में, मुझे गैर-ASCII वर्णों को एक स्रोत फ़ाइल में रखने के लिए थोड़ा असहज लगता है। इस ऐपल डॉक का कहना है कि, 10.4 से शुरू होकर, UTF-16 स्ट्रिंग्स अंदर से ठीक हैं @"..."। किसी तरह GCC लैटिन फाइल -1 में स्रोत फ़ाइल को सही ढंग से बाइनरी में UTF-16 में परिवर्तित करने के लिए लगता है, लेकिन मुझे लगता है कि 7-बिट ASCII वर्णों का उपयोग केवल स्रोत कोड के अंदर करना, और उपयोग करना सबसे सुरक्षित है NSLocalizedString


2

मुझे लगता है कि आपके उच्चारण पात्र चीजों को फेंक रहे हैं; उन्हें -stringByAddingPercentEscapesUsingEncoding द्वारा नियंत्रित नहीं किया जाएगा:।


2

यदि URL URL RFC 2396 के अनुरूप नहीं है और उन्हें बच जाना चाहिए तो NSURL URLWithString: @ "" शून्य हो जाएगा

यदि आप लिंक में rfc2396 के माध्यम से पढ़ते हैं तो आपको विवरणों का भार मिलेगा

एक बढ़िया साइट जो मुझे पता लगाने के लिए है कि आपत्तिजनक चरित्र कहां है, URL के लिए पथ विकल्प चुनें

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


0

URLWithString: कॉल एक शून्य वापस आ जाएगी यदि स्ट्रिंग इसे विकृत है। चूंकि NSURL विकृत url के लिए nil को लौटाता है, NSLog आपके स्ट्रिंग और सेट ब्रेकप्वाइंट को देखने के लिए कि आपके NSURL निर्माण विधि में क्या पारित किया जा रहा है। यदि आपका URLWithString एक हार्ड कोडित मूल्य के साथ काम करता है, तो यह और भी प्रमाण है कि आप जो भी पास कर रहे हैं वह विकृत है। देख


-1

आप NSString के बिना सीधे NSURL का उपयोग कर सकते हैं।

//.ह फ़ाइल

@interface NewsBrowser : UIViewController {

    UIWebView *webView;
    NSURL *NewsUrl;

}

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

@property(nonatomic,assign)NSURL *NewsUrl;

@end

// फ़ाइल

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

और मैं इस दृश्य से URL को अन्य दृश्य (NewsUrl चर का उपयोग करके) पास करता हूं।

कोशिश करो।


यह उत्तर प्रश्न को बिल्कुल भी संबोधित नहीं करता था, जो पूछ रहा था कि URLWithString: शून्य क्यों लौट रहा था। (आगे, आपने URL में स्ट्रिंग बदलने का एक साधन भी नहीं दिखाया।)
ArtOfWarfare
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.