2012-02-12 16 views
23

मैं हर अनुरोध के लिए मेरे एप्लिकेशन में AFNetworking का उपयोग (प्रवेश की तरह, यूआरएल से डेटा प्राप्त, आदि)।AFNetworking और कोई इंटरनेट कनेक्शन परिदृश्य

उदाहरण के लिए इसे लें: कोई उपयोगकर्ता लॉगिन बटन पर क्लिक करता है और कोई कनेक्शन नहीं है, त्रुटि को कहने वाले UIAlertView को तत्काल प्रदर्शित कैसे करें? केवल तरीका अनुरोध समय-समय पर प्रतीक्षा करने और failure ब्लॉक निष्पादित करने का तरीका है? क्या ऐसा कोई तरीका नहीं है जो तत्काल जांच करे कि कनेक्शन है या नहीं?

धन्यवाद!

उत्तर

57

0,9 के रूप में, AFHTTPClient वास्तव में नेटवर्क गम्यता में निर्मित (एप्पल के ऊपर उल्लिखित गम्यता कोड के लिए अधिक सरल इंटरफेस) है। पहुंचने योग्य स्थिति में परिवर्तन होने पर प्रतिक्रिया निर्दिष्ट करने के लिए बस SystemConfiguration ढांचे को शामिल करें और -setReachabilityStatusChangeBlock: का उपयोग करें।

+1

हाय मैट और आपके उत्तर के लिए धन्यवाद।लेकिन आपका सुझाव इंटरनेट ** इंटरनेट का उपयोग करने वाली प्रत्येक ** विधि से पहले इंटरनेट कनेक्शन की वर्तमान स्थिति की जांच करना है और यदि कोई कनेक्शन कोई अलर्ट प्रदर्शित नहीं करता है? –

+3

नहीं, बिलकुल नहीं। 'AFHTTPClient' अभिगम्यता परिवर्तनों के लिए मॉनीटर करता है और जब ऐसा होता है तो निर्दिष्ट ब्लॉक निष्पादित करता है। ब्लॉक में एक भी तर्क है, जो कि 'बेसURL' पहुंच योग्य है या नहीं, इसके लिए एक बूलियन है। – mattt

+1

मैंने 'AFHTTPClient' को उपclassed है और मैंने' -setReachabilityStatusChangeBlock: ''NSLog (@" test ") के साथ' ओवरराइड किया है लेकिन कथन कभी निष्पादित नहीं किया गया है। क्यूं कर? –

0

कैसे Reachability?

का उपयोग कर आप देख सकते हैं कि क्या आप एक कनेक्शन प्रयास करने से पहले आप यह कर के लिए एक प्रशंसनीय कारण है के बारे में।

ऐसा लगता है कि Apple Sample Project for Reachability प्रारंभिक स्थिति कैसे प्राप्त करता है।

+0

सूचित किसी भी मामले में जहां गम्यता रिटर्न नहीं, किसी भी सॉकेट आई/ओ असफल नहीं हो तुरंत, भी के लिए? – smparkes

+0

हां, इस प्रकार रीचैबिलिटी काम करता है लेकिन यह आपको पहुंचने पर अधिसूचनाएं प्राप्त करने की क्षमता की तरह अतिरिक्त देता है - इंटरप्ट्स, मतदान नहीं। –

+0

मुझे एडम क्षमा करें, लेकिन अगर नेटवर्क का उपयोग नहीं किया जाता है लेकिन डिवाइस कनेक्ट है और मैं नेटवर्क की स्थिति की जांच करता हूं, तो पहुंचने योग्यता मुझे बताती है कि मेरे पास कोई कनेक्शन नहीं है। यह उत्तर बताता है कि मैं बेहतर तरीके से क्या कहूंगा: http://stackoverflow.com/a/9186073/719127 –

2

शायद तुम "पहुँचता" का उपयोग उपकरण नेटवर्क से कनेक्ट कर रहा है, तो यह निर्धारित करने के सकता है। यहां ऐप्पल दस्तावेज़ का लिंक है। : Reachability

उदाहरण के लिए:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil]; 
reachability = [Reachability reachabilityForInternetConnection]; 
[reachability startNotifier]; 
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 
if(remoteHostStatus == NotReachable) { 
    //Your UIAlertView 
} 
28
AFNetworking साथ

इन चरणों का एक आदेश AFNetworing वर्गों को जोड़ने के बाद setReachabilityStatusChangeBlock: का लाभ लेने के लिए का पालन किया है कि कर रहे हैं -

  1. SystemConfiguration.framework अपनी परियोजना में जोड़े
  2. PCH फ़ाइल में जोड़ने #import <SystemConfiguration/SystemConfiguration.h>
  3. यह मानते हुए कि आपके पास इस सबक्लास में AFHTTPClient का सबक्लास है, इनिट फ़ंक्शन में कोड की रेखाओं के नीचे जोड़ें -
 
[self setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
     NSLog(@"changed %d", status); 
     //your code here 
    }]; 
2

मैं AFNetworkingOperationDidFinishNotification का उपयोग करता हूं। हर बार एक http अनुरोध असफल हो जायेगी, चेतावनी पॉप अप होता है और उपयोगकर्ता

- (void)addNetworkObserver 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(HTTPOperationDidFinish:) 
               name:AFNetworkingOperationDidFinishNotification 
               object:nil]; 
} 

- (void)HTTPOperationDidFinish:(NSNotification *)notification 
{ 
    AFHTTPRequestOperation *operation = (AFHTTPRequestOperation *)[notification object]; 
    if (![operation isKindOfClass:[AFHTTPRequestOperation class]]) { 
     return; 
    } 
    if (operation.error) { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection error" 
                 message:@"Missing connection to the internet" 
                 delegate:nil 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil]; 

     [alert show]; 
    } 
} 
संबंधित मुद्दे