2012-03-08 12 views
7

बाद मैं पढ़ लिया है मैं ने पाया है कि reachabilityWithHostName का उपयोग कर के रूप में यह एक एक यूआरएल के साथ काम नहीं करता है this question के लिए इस सवाल का जवाब: mySite.com/service.asmx, वहाँ वैसे भी इस URL reachabilityWithHostName उपयोग करने के खिलाफ गम्यता जाँच करने के लिए है या कोई reachability कक्षा विधि?एक यूआरएल के किसी विशिष्ट पृष्ठ के खिलाफ गम्यता जाँच

अग्रिम धन्यवाद।

+1

गम्यता केवल वहाँ जाँच करने के लिए इस प्रकार आप उपयोगकर्ता को सचेत और फलस्वरूप संचित डेटा का उपयोग करना चाहिए निर्धारित कर सकते हैं। यह उपयोगकर्ता इंटरैक्शन के लिए ऐप्पल दिशानिर्देशों का हिस्सा है। यदि आप किसी विशिष्ट यूआरएल की जांच करना चाहते हैं, तो इसे एक्सेस करने का प्रयास करें, टाइमआउट को बहुत छोटा होने और त्रुटि को पकड़ने के लिए सेट करें। –

उत्तर

18

रीचैबिलिटी क्लास और -reachabilityWithHostname: को यह निर्धारित करने के लिए एक त्वरित, असफल-तेज तंत्र के रूप में डिज़ाइन किया गया है कि आपके पास मेजबान के लिए मूल नेटवर्क कनेक्टिविटी है या नहीं। यदि आपको यह सत्यापित करने की आवश्यकता है कि एक विशेष यूआरएल डाउनलोड किया जा सकता है, तो आपको यह सत्यापित करने के लिए कि यह वास्तव में उपलब्ध है, यूआरएल की सामग्री को पुनः प्राप्त करने के लिए आपको NSURLConnection का उपयोग करने की आवश्यकता है।

आप अग्रभूमि या पृष्ठभूमि में ऐसा करने की जरूरत है कि क्या आधार पर, आप सरल बल्कि अवरुद्ध उपयोग कर सकते हैं:

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error 

या आप एक NSURLConnection वस्तु बनाने के और अधिक जटिल विधि का उपयोग कर सकते हैं, एक प्रतिनिधि की स्थापना सरल मामले के लिए प्रतिक्रियाओं प्राप्त करने के लिए और उन प्रतिक्रियाओं में आने के लिए इंतजार

:।

NSURL *myURL = [NSURL URLWithString: @"http://example.com/service.asmx"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: myURL]; 
[request setHTTPMethod: @"HEAD"]; 
NSURLResponse *response; 
NSError *error; 
NSData *myData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error]; 

तुम वापस एक प्राप्त होता है ऑन-नील myData, आपको कुछ प्रकार की कनेक्टिविटी मिली है। response और error आपको बताएगा कि सर्वर ने आपको क्या जवाब दिया है (प्रतिक्रिया के मामले में और यदि आपको गैर-शून्य मायडाटा प्राप्त हुआ है) या किस प्रकार की त्रुटि हुई है, तो मेरे myData के मामले में।

गैर-मामूली मामले के लिए, आप ऐप्पल के Using NSURLConnection से अच्छा मार्गदर्शन प्राप्त कर सकते हैं।

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

कुछ इस तरह: आप इंटरनेट पहुँच है या नहीं

NSURL *myURL = [NSURL URLWithString: @"http://example.com/service.asmx"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: myURL]; 
[request setHTTPMethod: @"HEAD"]; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, NULL), ^{ 
     NSURLResponse *response; 
     NSError *error; 
     NSData *myData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error]; 
     BOOL reachable; 

     if (myData) { 
      // we are probably reachable, check the response 
      reachable=YES; 
     } else { 
      // we are probably not reachable, check the error: 
      reachable=NO; 
     } 

     // now call ourselves back on the main thread 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self setReachability: reachable]; 
     }); 
}); 
+0

क्या आप आवेदन की लटकने से रोकने के लिए पृष्ठभूमि में इसे कैसे करना है इसका एक सरल उदाहरण प्रदान कर सकते हैं? – JAHelia

+0

मैंने बैकग्राउंड थ्रेड पर एक एसिंक्रोनस कॉल पर सिंक्रोनस अनुरोध करने के लिए जीसीडी का उपयोग करने का एक उदाहरण जोड़ा है, जब यह पूरा हो जाता है तो प्रतिक्रिया के रूप में आपके मुख्य धागे पर प्रतिक्रिया वापस लौटाता है। उम्मीद है की वो मदद करदे। – gaige

+0

कमाल! उपर्युक्त कोड में एक छोटी गलती है, आपको पहले कथन में पहुंचने योग्य = YES सेट करना होगा और कथन के दूसरे नंबर में नहीं होना चाहिए। बहुत बहुत धन्यवाद। सहायक संपादन के लिए – JAHelia

5

यदि आप के विरुद्ध पहुंच क्षमता देखना चाहते हैं तो एक URL (आमतौर पर इस्तेमाल किया जाने वाला एक होस्टनाम के विरुद्ध होता है) बस NSRLConnection का उपयोग करके एक HEAD अनुरोध करें।

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