2009-01-10 6 views
5

मैं this useful looking answer to my question के साथ अनुसरण कर रहा हूं।आईफोन एप्लिकेशन से प्राप्त करें और पोस्ट अनुरोध करें - स्पष्टीकरण की आवश्यकता

यह काम कर रहा है, लेकिन यहां दो सवाल मेरे पास है कर रहे हैं:

  1. मैं एक HTTP त्रुटि पता कैसे लगाते हैं? DidFailWithError विधि को कॉल नहीं किया जा रहा प्रतीत होता है?

अद्यतन:It considers any response a success। तो मुझे लगता है कि मुझे didRecieveResponse विधि में HTTP त्रुटियों को संभालना है, लेकिन जब मैं HTTP त्रुटि दबाता हूं तो उपयोगकर्ता को यह बताने में कोई त्रुटि होती है, क्या मुझे कनेक्शन को किसी भी तरह से रोकने की आवश्यकता है? और/या सफाई?

  1. मैं जवाब में इस लाइन देखें:
[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

मुझे लगता है कि जारी करने के लिए की जरूरत है? कहाँ, कैसे, कब?

उत्तर

4

आप स्थिति कोड didReceiveResponse

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 
    NSHTTPURLResponse *httpResponse; 
    httpResponse = (NSHTTPURLResponse *)response; 
    int statusCode = [httpResponse statusCode]; 
    //statusCode will be the http code returned like 201,500 
} 

में लौट आए रोक के लिए मिल जाएगा कनेक्शन, कनेक्शन के लिए एक वर्ग स्तरीय चर का उपयोग करें। इसके बारे में जाने का सबसे अच्छा तरीका एक रैपर तैयार करेगा जो अनुरोध भेजता है और प्रतिक्रिया प्राप्त करता है। अपने व्यू कंट्रोलर को इस कक्षा का एक प्रतिनिधि बनाएं और जब भी किया गया RereiveResponse त्रुटि स्थिति कोड देता है, तो प्रतिनिधि की उपयुक्त विधि को कॉल करें और कनेक्शन को रोकें।

यहाँ एक अच्छा आवरण वर्ग उदाहरण

http://kosmaczewski.net/projects/objective-c-rest-client/

3

हां, आपको उस ऑब्जेक्ट को रिलीज़ करने की आवश्यकता है। Memory Management Programming Guide for Cocoa देखें। असल में, यदि आपने कभी भी एक विधि नाम के साथ कोई ऑब्जेक्ट बनाया है जो alloc या new से शुरू होता है या इसमें copy है, तो आप ऑब्जेक्ट का स्वामी बन जाते हैं और बाद में इसे मुक्त करने के लिए ज़िम्मेदार होते हैं। केवल उस मामले में जहां आप जानते हैं कि आपको ऑब्जेक्ट की आवश्यकता होगी जब तक प्रोग्राम समाप्त नहीं हो जाता है, यह ठीक नहीं है, इस स्थिति में ऑपरेटिंग सिस्टम मेमोरी को पुनः प्राप्त करता है जब आपका ऐप समाप्त हो जाता है।

यदि आपको केवल एक छोटे से दायरे में वस्तु की आवश्यकता है, तो आप इसे autorelease संदेश भेज सकते हैं। यह इसे ऑटोरेलीज पूल में जोड़ देगा। ऑटोरेलीज पूल समय-समय पर प्रत्येक ऑब्जेक्ट को release संदेश भेजता है। यह जटिल है; autorelease pools पर अनुभाग देखें। उदाहरण के लिए:

इस मामले में, हालांकि, NSURLConnection एस असीमित हैं, autoreleasing काम नहीं करेगा। आपको पता नहीं है कि यह डेटा के साथ आपकी ऑब्जेक्ट में वापस कॉल करने जा रहा है, इसलिए आप यह सुनिश्चित करना चाहते हैं कि ऑब्जेक्ट अभी तक जारी नहीं हुआ है। सुनिश्चित करने का एकमात्र तरीका यह जानना है कि जब आप ऑब्जेक्ट के साथ काम करते हैं, और फिर इसे release संदेश भेजें।

विभिन्न init* कार्यों के सभी दिए गए ऑब्जेक्ट के लिए एक सूचक लौटने के लिए, तो तुम सिर्फ कर सकते हैं:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
... 
// when done with connection: 
[connection release]; 
+0

है यही कारण है कि मैं क्या सोचा था। मैं उलझन में हूं कि इसे कैसे रिलीज़ किया जाए क्योंकि इसका नाम नहीं है? – Greg

0

अपने "अद्यतन" में प्रश्न का उत्तर देना है ...

तुरंत NSURLConnection autorelease। कनेक्शन वस्तु NSRunLoop (: NO निर्माता जो करने के लिए वह खुद को स्वचालित रूप से कहते हैं जब तक आप startImmediately का उपयोग करें) द्वारा बनाए रखा है। यह त्रुटि या खत्म होने पर स्वचालित रूप से रन लूप (और इसलिए dealloc'd) से हटा दिया जाएगा।

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