2011-10-31 9 views
7

मैं विशेष रूप से @ christo16 के लिए आलेख Convert NSData bytes to NSString? लेख के लिए आभारी हूं। मैं पहले PHP सर्वर से मूल्य प्राप्त करने के लिए ASIHttpRequest पर निर्भर था। अब कोड की इस पंक्ति का उपयोग करके:क्यों NSData डेटा WithContentsOfURL कभी-कभी नल मान लौटाता है?

NSString *pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"http://www.apple.com"]] 

मैं अपनी इच्छित कार्यक्षमता प्राप्त कर सकता हूं।

लेकिन कभी-कभी उस पंक्ति का कारण पृष्ठ सामग्री न्यूल होने का कारण बनता है। मैं पहले से ही उस पंक्ति को बदलता हूं:

NSString *fullUrl = [NSString stringWithFormat:@"http://www.apple.com"]; 
NSURL *url = [[NSURL alloc] initWithString:fullUrl]; 
NSData *pageContents; 
NSString *response = NULL; 

while(response==NULL) 
{ 
    pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:fullUrl]]; 
    response = [NSString stringWithUTF8String:[pageContents bytes]]; 
    NSLog(@"content = %@", response); 
} 

क्या ऐसा करने का कोई बेहतर तरीका है? अब तक, मुझे कोई समस्या नहीं है। मैं सिर्फ आश्चर्य है कि एक ही परिणाम प्राप्त करने

धन्यवाद

+1

उस एक-लाइनर का नकारात्मक पक्ष यह है कि यह संभवतः लंबे समय तक आपके यूआई को अवरुद्ध करता है। लूप भी बदतर है: यदि सर्वर कनेक्शन का जवाब नहीं दे रहा है, तो यह यूआई को प्रभावी रूप से हमेशा के लिए अवरुद्ध कर देगा (जब तक स्प्रिंगबार्ड तंग हो जाता है और आपकी प्रक्रिया को मार देता है)। –

उत्तर

18

यह nil वापस आ जाएगी अगर वहाँ डेटा पुन: प्राप्त करने में त्रुटि है की एक और अधिक सुरुचिपूर्ण तरीका है कि क्या वहाँ।

आप dataWithContentsOfURL:options:error: संदेश का उपयोग यह पता लगाने के लिए कर सकते हैं कि यह वापस क्यों लौट रहा है। त्रुटि आपके द्वारा पारित NSError* सूचक में वापस आ जाएगी।

+0

धन्यवाद @Brigham उस जानकारी के लिए। लेकिन, समस्या यह है कि, कभी-कभी शून्य, कभी-कभी नहीं। इसलिए, मैं इसे तब तक करने के लिए मजबूर करता हूं जब तक कि यह शून्य न हो। यदि डेटा WithContentsOfURL का उपयोग कर रहे हैं: विकल्प: त्रुटि, आप इस तरह कैसे संभालते हैं? – swdev

+1

@ एसडब्ल्यूडीवी: आप क्या गलत हो गए हैं, यह जानने के लिए त्रुटि को देखते हैं, और गलत होने पर उचित प्रतिक्रिया देते हैं। आमतौर पर यह उपयोगकर्ता को त्रुटि पेश करेगा। –

1

शायद तस्वीर बहुत बड़ी है या यूआरएल गलत है।

NSError* error = nil; 
NSData* data = [NSData dataWithContentsOfURL:yourURL options:NSDataReadingUncached error:&error]; 
if (error) { 
    NSLog(@"%@", [error localizedDescription]); 
} else { 
    NSLog(@"Data has loaded successfully."); 
} 
0

अपना नेटवर्क कनेक्शन जांचें। यदि यह जुड़ा हुआ है तो समस्या हल हो जाएगी।

संबंधित मुद्दे