त्रुटि डोमेन = NSURLErrorDomain कोड = -1005 "नेटवर्क कनेक्शन खो गया था।"


268

मेरे पास एक एप्लिकेशन है जो iOS7 और iOS8 दोनों के साथ Xcode6-Beta1 और Xcode6-Beta2 पर ठीक काम करता है। लेकिन Xcode6-Beta3, Beta4, Beta5 के साथ मैं iOS8 के साथ नेटवर्क मुद्दों का सामना कर रहा हूं, लेकिन iOS7 पर सब कुछ ठीक है। मुझे त्रुटि मिलती है "The network connection was lost."। त्रुटि इस प्रकार है:

त्रुटि: त्रुटि डोमेन = NSURLErrorDomain कोड = -1005 "नेटवर्क कनेक्शन खो गया था।" UserInfo = 0x7ba8e5b0 {NSErrorFailingURLStringKey =, _kCFStreamErrorCodeKey = 57, NSErrorFailingURLKey =, NSLocalizedDescription = नेटवर्क कनेक्शन समाप्त हो गया है, _kCFStreamErrorDomKey_omain_mail/omain.gov.in

मैं नेटवर्क कॉल करने के लिए AFNetworking 2.x और निम्न कोड स्निपेट का उपयोग करता हूं:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:<example-url>
   parameters:<parameteres>
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
          NSLog(@“Success: %@", responseObject);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          NSLog(@"Error: %@", error);
      }];

मैंने कोशिश की NSURLSessionलेकिन फिर भी वही त्रुटि प्राप्त हुई।


किसी भी अद्यतन ? यह केवल मेरे लिए Wifi पर iOS 8 पर होता है, फिर भी वर्कअराउंड खोजने की कोशिश कर रहा है।
डिमिलियन


क्या कोई मेरी समस्या को हल करने में मेरी मदद कर सकता है, लगभग एक ही मुद्दा लेकिन विभिन्न त्रुटि कोड, stackoverflow.com/questions/26972822/…
iYoung

1
iOS 10.0.1 और Xcode 8. के ​​साथ एक ही मुद्दे का सामना करना पड़ रहा है
Satheeshwaran

1
मुझे आज सुबह यह त्रुटि मिली और इसे अभी एक सरल और अजीब समाधान के साथ तय किया। अनुरोधित सर्वर पता गलत है, कोई 4xx या 5xx स्थिति कोड वापस नहीं आया है, यह सिर्फ इस मुद्दे का सामना करता है, यह निश्चित नहीं है कि वास्तव में रूट क्या है। इसलिए, कृपया अपनी टीम में बैकएंड डेवलपर्स के साथ पुष्टि करें, या आप उस पर कुछ घंटे बर्बाद करेंगे।
इताची

जवाबों:


414

सिम्युलेटर को फिर से शुरू करना मेरे लिए मुद्दा तय किया।


3
क्या होगा अगर यह समस्या डिवाइस पर है सिम नहीं? डिवाइस को पुनरारंभ करने का प्रयास किया, अभी भी वही त्रुटि है।
सीन क्लार्क

2
@ सीन क्लार्क: अगला जवाब देखें: सिम्युलेटर काम करता है रिबूट करना क्योंकि ओएस को सर्वर द्वारा हटाए जाने के बाद उन्हें फिर से उपयोग करने की कोशिश करने के बजाय मृत कनेक्शन को छोड़ने की आवश्यकता होती है। इस समस्या को हल करने के लिए, आप iOS क्लाइंट के लिए सर्वर पर Keep-ज़िंदा तंत्र को अक्षम कर सकते हैं, या, यदि आपके पास सर्वर तक पहुंच नहीं है, तो आप बस एक ही अनुरोध फिर से कोशिश कर सकते हैं जब यह विफल हो (विफलता बनाना चाहिए ओएस कनेक्शन को छोड़ देता है और एक ताजा एक को तुरंत भेजा जाता है जब रिट्री भेजा जाता है)।
आर्थर

मैं वर्तमान में Xcode 6.2 का उपयोग कर रहा हूं और IOS सिम्युलेटर> रीसेट सेटिंग्स और सामग्री पर क्लिक करने पर यह हल हो गया है। एक बार जब मैं समाप्त हो गया तो मैंने सिम्युलेटर छोड़ दिया और पुनर्निर्माण किया और अपनी परियोजना को चलाया ... सब कुछ पूरी तरह से बाद में काम किया।
KingPolygon

मेरे लिए सिम्युलेटर को रीसेट करने के लिए काम किया गया था लेकिन केवल 10% समय। मुझे बस एक नया ISP मिला और यह थोड़े अजीब तरीके से चलता है। यह अब सिम्युलेटर पर हर समय होता है। नेटवर्क हो सकता है।
noobsmcgoobs

1
सिम्युलेटर को रीसेट करना मेरे लिए काम नहीं करता था। हालाँकि, चार्ल्स ने गायब होने को मुद्दा बनाया। देखें stackoverflow.com/a/26066764/598057 जो चार्ल्स का उपयोग करने का सुझाव देती है। बहुत अजीब लेकिन काम करता है ...
स्टैनिस्लाव पानकेविच

231

हमारे पास यह सटीक त्रुटि थी और यह अंतर्निहित HTTP कार्यान्वयन के साथ एक मुद्दा निकला NSURLRequest:

जहां तक ​​हम बता सकते हैं, जब iOS 8/9/10/11 को एक Keep-Aliveहेडर के साथ HTTP प्रतिक्रिया मिलती है , तो यह कनेक्शन को बाद में फिर से उपयोग करने के लिए रखता है (जैसा कि इसे चाहिए), लेकिन यह इसे timeoutपैरामीटर से अधिक के लिए रखता है Keep-Alive हैडर (ऐसा लगता है कि कनेक्शन को हमेशा 30 सेकंड तक जीवित रखें।) तब जब कोई दूसरा अनुरोध 30 सेकंड से कम समय बाद ऐप द्वारा भेजा जाता है, तो यह एक कनेक्शन को फिर से उपयोग करने की कोशिश करता है जो सर्वर द्वारा गिरा दिया गया हो सकता है। (यदि वास्तविक से अधिक Keep-Aliveबीत चुका है)।

यहाँ हम अभी तक पाए गए समाधान हैं:

  • सर्वर के टाइमआउट पैरामीटर को 30 सेकंड से ऊपर बढ़ाएं। ऐसा लग रहा है कि iOS हमेशा ऐसा व्यवहार कर रहा है जैसे कि सर्वर की-अलाइव हेडर में दिए गए मूल्य की परवाह किए बिना 30 सेकंड के लिए कनेक्शन खुला रखेगा। (यह KeepAliveTimeoutविकल्प सेट करके अपाचे के लिए किया जा सकता है ।
  • आप बस अपने ऐप के उपयोगकर्ता-एजेंट के आधार पर iOS ग्राहकों के लिए जिंदा तंत्र को निष्क्रिय कर सकते हैं (उदाहरण के लिए Apache: BrowserMatch "iOS 8\." nokeepaliveआधुनिक फ़ाइल में setenvif.conf)
  • यदि आपके पास सर्वर तक पहुंच नहीं है, तो आप Connection: closeहेडर के साथ अपने अनुरोध भेजने की कोशिश कर सकते हैं : यह सर्वर को तुरंत कनेक्शन छोड़ने और किसी भी जीवित हेडर के बिना जवाब देने के लिए कहेगा। इस समय, NSURLSession Connectionशीर्षलेखों को ओवरराइड करने लगता है जब अनुरोध भेजे जाते हैं (हमने इस समाधान का बड़े पैमाने पर परीक्षण नहीं किया था क्योंकि हम अपाचे कॉन्फ़िगरेशन को ट्विक कर सकते हैं)

7
यहाँ इस मुद्दे को प्रदर्शित करने वाली एक उत्कृष्ट परियोजना है, Apple को भी एक बग रिपोर्ट प्रस्तुत की गई है। cl.ly/Xgkl/keep-alive-fail.zip प्रोजेक्ट लॉन्च करें, पहले पोस्ट बटन पर क्लिक करें (स्क्रीन पर शीर्ष), 5 सेकंड के लिए प्रतीक्षा करें, फिर से क्लिक करें, त्रुटि।
डिमिलियन

5
रखना-जीवित द्विपक्षीय है। ग्राहक एक http हैडर जोड़ेंगे "कनेक्शन: कीप-अलाइव" डिफ़ॉल्ट रूप से, क्लाइंट अनुरोधों पर रखने वाले मापदंडों को जोड़कर मदद मिल सकती है; उदाहरण के लिए "कीप-अलाइव: अधिकतम = 1"। आर्थर की टिप्पणी बहुत सहायक है, लेकिन iOS8 सिम्युलेटर नेटवर्किंग में 1 से अधिक समस्या का भी संकेत देती है। मुझे एक कनेक्शन भेजने के लिए https का उपयोग करना है क्योंकि अनुरोध भेजने से पहले http विफल हो जाता है।
ptc

5
हे दोस्तों, मैं डिवाइस पर यह एक ही समस्या है। क्या इसे ठीक करने का कोई तरीका है? हालांकि iOS 7 पर कोई समस्या नहीं है।
एंड्रेस सी

9
युक्ति: आप NSURLErrorNetworkConnectionLostहार्ड-कोडिंग के बजाय निरंतर का उपयोग कर सकते हैं -1005
विन्सेन्ट टूरेनर

6
यह समस्या अभी भी iOS 11.2.6 पर मौजूद है।
मकाले

47

मेरे लिए, Resetting content and settingsसिम्युलेटर काम करता है। सिम्युलेटर को रीसेट करने के लिए चरणों का पालन करें:

iOS सिम्युलेटर -> सामग्री और सेटिंग्स रीसेट करें -> रीसेट रीसेट करें (चेतावनी पर जो आएगा)


29

IOS 8.0 सिम्युलेटर रनटाइम में एक बग होता है, जिससे यदि आपके नेटवर्क कॉन्फ़िगरेशन में बदलाव होता है, तो सिम्युलेटेड डिवाइस में उच्च स्तरीय एपीआई (जैसे: CFNetwork) यह सोचते हैं कि उसने नेटवर्क कनेक्टिविटी खो दी है। वर्तमान में, सलाह दी जाती है कि आपके नेटवर्क कॉन्फ़िगरेशन में परिवर्तन होने पर नकली डिवाइस को केवल रिबूट करें।

यदि आप इस मुद्दे से प्रभावित हैं, तो कृपया इसे बढ़ाने के लिए http://bugreport.apple.com पर अतिरिक्त डुप्लिकेट रडार दर्ज करें ।

यदि आप परिवर्तित नेटवर्क कॉन्फ़िगरेशन के बिना इस समस्या को देखते हैं , तो वह ज्ञात बग नहीं है, और आपको निश्चित रूप से एक रडार दर्ज करना चाहिए, यह दर्शाता है कि समस्या ज्ञात नेटवर्क-कॉन्फ़िगरेशन-परिवर्तित बग नहीं है।


7
मेरे पास डिवाइस पर भी यह समस्या है।
डैरेन

@ डारेन तब यह मुद्दा नहीं है जिसका मैं उल्लेख कर रहा था। मेरा सुझाव है कि आप एक राडार दायर करें।
जेरेमी हडल्टन सीक्विया

4
कृपया अपनी रडार आईडी शामिल करें ताकि यह डुप्लिकेट को आसानी से दाखिल कर सके
डैनियल गैलास्को

11

मेरे लिए समस्या का हल सिम्युलेटर को फिर से शुरू करना और सामग्री और सेटिंग्स को रीसेट करना था।


यह सिम्युलेटर रीसेट से पहले ऐप को मारने और मैक को पुनरारंभ करने में भी मदद करता है। मैं अक्सर विभिन्न वाईफाई स्पॉट के साथ स्थानों को बदलता हूं और यह एक ऐसी प्रक्रिया है जो मेरे लिए समस्या को ठीक करती है।
व्लादिमीर स्लाविक

11

आईओएस 8 सिम्युलेटर पर चलने पर बीटा 5 और एफ़एन नेटवर्किंग के साथ एक समस्या भी होती है, जिसके परिणामस्वरूप कनेक्शन त्रुटि होती है:

डोमेन = NSURLErrorDomain कोड = -1005 "नेटवर्क कनेक्शन खो गया था।"

IOS 7 और 7.1 सिमुलेटर पर समान कोड ठीक काम करता है और मेरे डिबगिंग प्रॉक्सी से पता चलता है कि वास्तव में कनेक्शन के प्रयास से पहले विफलता होती है (यानी कोई अनुरोध लॉग नहीं किया गया)।

मैंने NSURLConnection में विफलता को ट्रैक किया है और Apple को बग की सूचना दी है। संलग्न चित्र में पंक्ति 5 देखें:

NSURLConnection ग्राहक प्रतिनिधि त्रुटि में विफल रहा

उपयोग करने के लिए बदलना httpsiOS 8 सिमुलेटर से कनेक्शन को रुक-रुक कर त्रुटियों के साथ अनुमति देता है।

समस्या अभी भी Xcode 6.01 (gm) में मौजूद है।


मैं NSURLSession और NSURLConnection के साथ एक ही समस्या देखता हूं, अर्थात AFNetworking के साथ समस्या का नियम है। इसके अलावा, मैंने पाया कि यह https के साथ काम करता है और http के साथ असफल होता है। मुझे अभी भी कोई समाधान नहीं मिला, क्या आपको कोई संकल्प मिला?
VoidStack

किसी भी रिज़ॉल्यूशन ने बग के रूप में रिपोर्ट नहीं किया है (18072300) https काम करने के बारे में टिप्पणी जोड़ देगा जो अच्छी जानकारी है।
ptc

क्या आप यहाँ बग लिंक पेस्ट कर सकते हैं? धन्यवाद क्योंकि मुझे लगता है कि मैं एक ही समस्या है, लेकिन मैं केवल NSURLConnection (और प्रतिनिधियों) का उपयोग करता हूं, लेकिन मुझे एक ही त्रुटि संदेश मिलता है
szuniverse

Apple बग रिपोर्ट साझा करने में सक्षम नहीं है। अभी भी खुला है और अभी भी XCODE 6 बीटा 7 में मौजूद है। यदि आप बग रिपोर्ट भी दर्ज करते हैं जो प्राथमिकता के साथ मदद करेगा।
ptc

ऐसा लगता है कि यह समस्या आईओएस सिम्युलेटर पर है और मैं वास्तविक डिवाइस से थक गया हूं यह ठीक काम करता है। आगे डिबगिंग मुझे समस्या आईओएस सिम्युलेटर पर पोर्ट के बारे में है, https पोर्ट 443 ठीक काम करता है और मैं http के लिए 8080 का उपयोग कर रहा था यह विफल हो गया था। मैंने अन्य पोर्ट (एस) का उपयोग करने की कोशिश की और आईओएस सिम्युलेटर पर http कॉल करने में सक्षम है। बीटा Xcode 6 में बग जैसा दिखता है, स्थिर Xcode 6 की प्रतीक्षा करने की आवश्यकता है
VoidStack

10

मैं इस समस्या का सामना कर रहा था, जबकि अल्मोफायर का उपयोग कर रहा था। मेरी गलती यह थी कि मैं [:]मापदंडों को GETभेजने के बजाय एक अनुरोध पर मापदंडों के लिए एक खाली शब्दकोश भेज रहा था nil

उम्मीद है की यह मदद करेगा!


खाली बॉडी डिक्शनरी के साथ GET और POST [:] इस त्रुटि को बेतरतीब ढंग से करेगा। मैं बैकेंड रेस्ट एपीआई के लिए पायथन फ्लास्क का उपयोग कर रहा हूं यह उपयोगी भी हो सकता है।
महमूद फ़येज़

10

ओपनिंग चार्ल्स ने मेरे लिए इस मुद्दे को हल किया, जो बहुत ही अजीब लगता है ...

चार्ल्स एक HTTP प्रॉक्सी / HTTP मॉनिटर / रिवर्स प्रॉक्सी है जो एक डेवलपर को उनके मशीन और इंटरनेट के बीच HTTP और SSL / HTTPS ट्रैफ़िक को देखने में सक्षम बनाता है। इसमें अनुरोध, प्रतिक्रियाएं और HTTP हेडर (जिसमें कुकीज़ और कैशिंग जानकारी शामिल हैं) शामिल हैं।


1
यह मेरे लिए भी काम करता है, मुझे लगता है क्योंकि चार लोग समनुरोधक अनुरोध को प्रॉक्सी करने के लिए एक ssl प्रमाणपत्र का उपयोग करते हैं, यह https
itispete

1
यह मेरे लिए हर काम करता है! इसे 30 बार आज़मा चुके हैं और यह 30 में से 30 काम करता है। मैंने सोचा कि यह फ्लूक था, लेकिन यह जानने के लिए अच्छा है कि यह मेरे लिए नहीं है।
शाम

2
चार्ल्स एक आसन्न उपकरण है जो आपको अपनी मशीन से ट्रैफ़िक देखने देता है। विवरण के लिए charlesproxy.com की जाँच करें । चार्ल्स एसएसएल प्रमाणपत्र नेटवर्क अनुरोध करने के लिए सिम्युलेटर की क्षमता के साथ गड़बड़ कर सकता है।
कॉलिन ट्रेमब्ले

@ColinTremblay मुझे लगता है कि आपका सिम्युलेटर / डिवाइस प्रॉक्सी का उपयोग करने के लिए कॉन्फ़िगर किया गया है। प्रॉक्सी निकालना भी काम करेगा।
bikram990

हास्यास्पद है, यह मेरे लिए भी काम किया। चार्ल्स को खोलने की आवश्यकता है फिर iOS सिम्युलेटर सेटिंग्स को रीसेट करें।
मैट एंड्रयूज

6

5 जनवरी को गीथूब पर पीजे की टिप्पणी देखें।

Method1:

if (error.code == -1005)
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        dispatch_group_t downloadGroup = dispatch_group_create();
        dispatch_group_enter(downloadGroup);
        dispatch_group_wait(downloadGroup, dispatch_time(DISPATCH_TIME_NOW, 5000000000)); // Wait 5 seconds before trying again.
        dispatch_group_leave(downloadGroup);
        dispatch_async(dispatch_get_main_queue(), ^{
            //Main Queue stuff here
            [self redoRequest]; //Redo the function that made the Request.
        });
    });

    return;
}

साथ ही कुछ ने साइट से फिर से जुड़ने का सुझाव दिया,

यानी POST के अनुरोध को दो बार फायर करना

समाधान: साइट से कनेक्शन करने के लिए एक विधि का उपयोग करें, वापसी (आईडी), यदि नेटवर्क कनेक्शन खो गया था, उसी विधि का उपयोग करने के लिए वापस लौटें।

विधि 2

-(id) connectionSitePost:(NSString *) postSender Url:(NSString *) URL {
     // here set NSMutableURLRequest =>  Request

    NSHTTPURLResponse *UrlResponse = nil;
    NSData *ResponseData = [[NSData alloc] init];

    ResponseData = [NSURLConnection sendSynchronousRequest:Request returningResponse:&UrlResponse error:&ErrorReturn];

     if ([UrlResponse statusCode] != 200) {

          if ([UrlResponse statusCode] == 0) {

                  /**** here re-use method ****/
                  return [self connectionSitePost: postSender Url: URL];
          }

     } else {
          return ResponseData;
     }

}

विधि 1 से मुझे बहुत मदद मिली है। धन्यवाद
अभिषेक मित्र

4

मुझे यह त्रुटि भी मिल रही थी, लेकिन सिम्युलेटर के बजाय वास्तविक उपकरणों पर। हमने HTTPS (gunicorn सर्वर) पर अपने heroku बैकएंड को एक्सेस करते समय त्रुटि देखी, और बड़े बॉडीज़ (64Kb से अधिक) के साथ POSTS कर रहे हैं। हम प्रमाणीकरण के लिए HTTP बेसिक didReceiveChallenge:ऑथेंट का उपयोग करते हैं, और ध्यान दिया गया कि त्रुटि को NSURLSession पर प्रतिनिधि विधि का उपयोग करके हल नहीं किया गया था , बल्कि प्रमाणीकरण के माध्यम से मूल अनुरोध हेडर में बेकिंग को जोड़कर बेक किया गया था Authentiation: Basic <Base64Encoded UserName:Password>। यह didReceiveChallenge:प्रतिनिधि संदेश को ट्रिगर करने के लिए आवश्यक 401 को रोकता है , और बाद में नेटवर्क कनेक्शन खो गया है।


आपकी बहुमूल्य टिप्पणी के लिए बहुत-बहुत धन्यवाद। आप सही हैं यदि मैं 64 kb छवि के बेस 64 स्ट्रिंग के नीचे अपलोड करता हूं तो यह सफलतापूर्वक अपलोड हो जाएगा।
विनायक भोर

3

मुझे भी यही समस्या थी। समाधान सरल था, मैंने सेट किया है HTTPBody, लेकिन सेट नहीं किया HTTPMethodहै POST। इसे ठीक करने के बाद, सब कुछ ठीक था।


3

मुझे भी यही समस्या थी। मुझे नहीं पता कि AFNetworking कैसे लागू करता है https अनुरोध, लेकिन मेरे लिए इसका कारण NSURLSession की कैश समस्या है।

मेरे आवेदन को सफारी से वापस ट्रैक करने के बाद और फिर एक http अनुरोध पोस्ट करें, "http लोड विफल 1005" त्रुटि दिखाई देगी। यदि मैं उपयोग करना बंद कर देता हूं "[NSURLSession sharedSession]", लेकिन "डेटाटैक्सविथप्रेशेस्ट:" विधि का पालन करने के लिए एक विन्यास योग्य NSURLSession उदाहरण का उपयोग करने के लिए, समस्या हल हो गई है।

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
config.URLCache = nil;
self.session = [NSURLSession sessionWithConfiguration:config];

बस सेट करने के लिए याद रखें config.URLCache = nil;


1
मुझे लगता है कि उन सभी को पुनः आरंभ करने वाले उपकरण / सिम्युलेटर या डेटा रीसेट करना इस उत्तर पर ध्यान देना चाहिए। मेरे लिए उनके सभी कार्य कैश को साफ़ करते हैं जो वास्तव में समस्या को ठीक करता है। तो इसका शायद URL कैश इश्यू है। मैं अब इसका परीक्षण करने जा रहा हूं।
कामरान खान

2

मुझे XCode से बाहर निकलना पड़ा, DerivedData फ़ोल्डर सामग्री (~ / लाइब्रेरी / डेवलपर / Xcode / DerivedData या / लाइब्रेरी / डेवलपर / Xcode / DerivedData) को हटा दिया और इस काम को करने के लिए सिम्युलेटर से बाहर निकलें।


1
उस सूची में एकमात्र प्रासंगिक कार्रवाई सिम्युलेटर को पुनरारंभ कर रही थी। Xcode को पुनः आरंभ करना और व्युत्पन्न डेटा को हटाना अत्यधिक है।
जेरेमी हडलस्टन सीक्विया

2

मेरे पास यह मुद्दा भी है, एक iOS 8 डिवाइस पर चल रहा है। यह यहां कुछ और विस्तृत है और ऐसा लगता है कि आईओएस का मामला उन कनेक्शनों का उपयोग करने की कोशिश कर रहा है जो पहले ही समाप्त हो चुके हैं। मेरा मुद्दा वैसा ही नहीं है, जैसा कि उस लिंक में कीप-अलाइव समस्या के बारे में बताया गया है, हालांकि यह एक ही अंतिम परिणाम है।

जब भी मुझे एक त्रुटि -1005 प्राप्त होता है, मैं एक पुनरावर्ती ब्लॉक को चलाकर अपनी समस्या को ठीक कर लेता हूं और इससे कनेक्शन अंततः हो जाता है, भले ही कभी-कभी कनेक्शन काम करने से पहले 100 + बार के लिए पुनरावृत्ति लूप कर सकता है, हालांकि यह केवल चलाने के लिए एक मात्र दूसरा जोड़ता है बार और मैं शर्त लगाता हूं कि मेरे लिए NSLog प्रिंट करने के लिए डिबगर का समय है।

यहां बताया गया है कि मैं AFNetworking के साथ एक पुनरावर्ती ब्लॉक कैसे चलाता हूं: इस कोड को अपनी कनेक्शन क्लास फ़ाइल में जोड़ें

// From Mike Ash's recursive block fixed-point-combinator strategy https://gist.github.com/1254684
dispatch_block_t recursiveBlockVehicle(void (^block)(dispatch_block_t recurse))
{
    // assuming ARC, so no explicit copy
    return ^{ block(recursiveBlockVehicle(block)); };
}
typedef void (^OneParameterBlock)(id parameter);
OneParameterBlock recursiveOneParameterBlockVehicle(void (^block)(OneParameterBlock recurse, id parameter))
{
    return ^(id parameter){ block(recursiveOneParameterBlockVehicle(block), parameter); };
}

फिर इसका उपयोग इस तरह करें:

+ (void)runOperationWithURLPath:(NSString *)urlPath
            andStringDataToSend:(NSString *)stringData
                    withTimeOut:(NSString *)timeOut
     completionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
    OneParameterBlock run = recursiveOneParameterBlockVehicle(^(OneParameterBlock recurse, id parameter) {
        // Put the request operation here that you want to keep trying
        NSNumber *offset = parameter;
        NSLog(@"--------------- Attempt number: %@ ---------------", offset);

        MyAFHTTPRequestOperation *operation =
            [[MyAFHTTPRequestOperation alloc] initWithURLPath:urlPath
            andStringDataToSend:stringData
            withTimeOut:timeOut];

        [operation setCompletionBlockWithSuccess:
            ^(AFHTTPRequestOperation *operation, id responseObject) {
                success(operation, responseObject);
            }
            failure:^(AFHTTPRequestOperation *operation2, NSError *error) {
                if (error.code == -1005) {
                    if (offset.intValue >= numberOfRetryAttempts) {
                        // Tried too many times, so fail
                        NSLog(@"Error during connection: %@",error.description);
                        failure(operation2, error);
                    } else {
                        // Failed because of an iOS bug using timed out connections, so try again
                        recurse(@(offset.intValue+1));
                    }
                } else {
                    NSLog(@"Error during connection: %@",error.description);
                    failure(operation2, error);
                }
            }];
        [[NSOperationQueue mainQueue] addOperation:operation];
    });
    run(@0);
}

आप देखेंगे कि मैं एक AFHTTPRequestOperationउपवर्ग का उपयोग करता हूं लेकिन अपना स्वयं का अनुरोध कोड जोड़ें। महत्वपूर्ण हिस्सा recurse(@offset.intValue+1));ब्लॉक को फिर से कॉल करने के लिए बुला रहा है।


MyAFHTTPRequestOperation वर्ग क्या है?
20

यह सिर्फ एक AFHTTPRequestOperation उपवर्ग है। मैं इसका उपयोग टाइमआउट और प्रमाणीकरण जैसे कुछ सामानों को पूर्वनिर्धारित करने के लिए करता हूं।
डैरेन

2

यदि डिवाइस पर समस्या आ रही है, तो जांचें कि क्या ट्रैफ़िक प्रॉक्सी से गुजर रहा है (सेटिंग्स> वाई-फाई> (जानकारी)> एचटीटीपी प्रॉक्सी)। मेरे पास चार्ल्स के साथ उपयोग करने के लिए मेरा डिवाइस सेटअप था, लेकिन प्रॉक्सी के बारे में भूल गया। लगता है कि चार्ल्स के बिना वास्तव में यह त्रुटि होती है।


2

यदि किसी को बैकएंड सर्वर पर फाइल अपलोड करते समय यह त्रुटि हो रही है, तो सुनिश्चित करें कि प्राप्त सर्वर का अधिकतम सामग्री आकार है जो आपके मीडिया के लिए स्वीकार्य है। मेरे मामले में, NGINX को एक उच्चतर की आवश्यकता थी client_max_body_size। एनजीआईएनएक्स अपलोड करने से पहले अनुरोध को अस्वीकार कर देगा, इसलिए कोई त्रुटि कोड वापस नहीं आया।


2

मुझे एक iOS 7 डिवाइस पर त्रुटि मिल रही थी जब मैं Xcode 6.2 बीटा का उपयोग कर रहा था।

Xcode 6.2 बीटा से 6.1.1 पर वापस स्विच करना इस समस्या को ठीक करता है, कम से कम iOS 7 डिवाइस पर।


मुझे नहीं लगता कि हल करने के लिए कुछ भी है: अंतर्निहित ओएस एक कारण के लिए कनेक्शन को वैध या नहीं छोड़ता है। इससे निपटने के लिए एक ऐप तैयार किया जाना चाहिए (ऑफ़लाइन या जो भी हो)। अपने विशेष xcode संस्करण में SDK को निश्चित रूप से छोटी गाड़ी नहीं मानें: जैसा कि मेरा जवाब 6.2 सबसे संभावित छोटी गाड़ी है, जबकि 6.1.1 अच्छा था। कुछ ऐसा ही अब देखा जा सकता है जब xod 6.4 यथोचित रूप से स्थिर लगता है जबकि 7.0.1 एक अल्फा ग्रेड सॉफ्टवेयर है। या ऐसा लगता है।
एंटोन ट्रोपास्को

2

पर 2017-01-25एप्पल इस त्रुटि के संबंध एक तकनीकी क्यू एंड ए जारी किया गया:

Apple तकनीकी क्यू एंड ए QA1941

"नेटवर्क कनेक्शन खो गया था" को संभालना त्रुटियां

A: NSURLErrorNetworkConnectionLost, NSURLErrorDomain त्रुटि डोमेन में त्रुटि -1005 है, और "नेटवर्क कनेक्शन खो जाने" के रूप में उपयोगकर्ताओं को प्रदर्शित किया जाता है। इस त्रुटि का अर्थ है कि HTTP अनुरोध जारी करते समय अंतर्निहित TCP कनेक्शन डिस्कनेक्ट हो रहा था (इस बारे में अधिक जानकारी के लिए नीचे देखें)। कुछ परिस्थितियों में NSURLSession इस तरह के अनुरोधों को स्वचालित रूप से वापस ले सकता है (विशेष रूप से, यदि अनुरोध निष्क्रिय है) लेकिन अन्य परिस्थितियों में जो HTTP मानकों द्वारा अनुमति नहीं है।

https://developer.apple.com/library/archive/qa/qa1941/_index.html#//apple_ref/doc/uid/DTS40017602


1

महीनों के लिए समस्या मिली, और आखिरकार पता चला कि जब हम अपने एपीआई डोमेन पर DNSSEC को अक्षम करते हैं, तो सब कुछ ठीक था: simple_smile:


2
क्या आप कृपया विस्तार से बता सकते हैं?
Groot

1

मैं एक वीपीएन के माध्यम से जुड़ रहा था। वीपीएन को अक्षम करने से समस्या हल हो गई।


1

अनुरोध के HTTPMethod को सेट किए बिना NSURLRequest में एक NSURLequest पास करते समय मैं इस त्रुटि को मार रहा था ।

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlComponents.URL];

त्रुटि डोमेन = NSURLErrorDomain कोड = -1005 "नेटवर्क कनेक्शन खो गया था।"

HTTPMethodहालाँकि, जोड़ें , और कनेक्शन ठीक काम करता है

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlComponents.URL];
[request setHTTPMethod:@"PUT"];

1

यदि आप अन्य एप्लिकेशन (जैसे सफारी) से अनुरोध कर सकते हैं तो परीक्षण करें। यदि आपके कंप्यूटर पर कुछ नहीं हो सकता है। मेरे मामले में मुझे अवास्ट एंटीवायरस के साथ यह समस्या थी, जो मेरे सिमुलेटर अनुरोध को रोक रहा था (मुझसे ऐसा क्यों नहीं पूछें)।


1

कंप्यूटर को पुनरारंभ करना मेरे लिए Xcode9.1 के साथ समस्या को निर्धारित करता है। मैंने सिम्युलेटर और Xcode को फिर से शुरू किया था, यह काम नहीं करता है।


1

मैं इसी मुद्दे का सामना कर रहा था, मैंने ऐप के लिए धीमी नेटवर्क परीक्षण के लिए नेटवर्क लिंक कंडीशनर को सक्षम किया है। यह त्रुटि कुछ समय पहले पैदा हो रही थी, जब मैंने इसे अक्षम कर दिया Settings > Developer > Network Link Conditioner, तो इसने मेरी समस्या हल कर दी।

यहां छवि विवरण दर्ज करें

आशा है कि यह किसी की मदद करेंगे।


1

मेरे मामले में ऐसा इसलिए था क्योंकि मैं HTTP से जुड़ रहा था और यह HTTPS पर चल रहा था


0

मैं निम्नलिखित कारण से इस मुद्दे को ले रहा था।

TLDR: जांचें कि क्या आप एक GETअनुरोध भेज रहे हैं जो NSURLRequest's HTTBodyसंपत्ति के बजाय url पर पैरामीटर भेजना चाहिए ।

==================================================

मैंने अपने ऐप पर एक नेटवर्क एब्स्ट्रेक्शन माउंट किया था, और यह मेरे सभी अनुरोधों के लिए बहुत अच्छा काम कर रहा था।

मैंने एक और वेब सेवा (अपना नहीं) के लिए एक नया अनुरोध जोड़ा और इसने मुझे यह त्रुटि देना शुरू कर दिया।

मैं एक खेल के मैदान में गया और मैदान से शुरू होकर एक नंगे पैर का अनुरोध किया, और यह काम किया। इसलिए मैंने अपने अमूर्त के करीब जाना शुरू कर दिया जब तक मुझे कारण नहीं मिला।

मेरे अमूर्त कार्यान्वयन में एक बग था: मैं एक अनुरोध भेज रहा था जो कि यूआरएल में एन्कोड किए गए मापदंडों को भेजने वाला था और मैं NSURLRequest's HTTBodyक्वेरी पैरामीटर के साथ ही संपत्ति भी भर रहा था । जैसे ही मैंने हटाया HTTPBodyयह काम किया।


0

मुझे यह त्रुटि प्राप्त हो रही थी और यह भी नोटिस किया गया था कि पोस्टमैन भी गिर रहा था, लेकिन ऐप एडवांस्ड रेस्ट क्लाइंट (एआरसी) में काम कर रहा था और एंड्रॉइड में काम कर रहा था। इसलिए मुझे संचार को डीबग करने के लिए चार्ल्स को स्थापित करना था और मुझे लगता है कि प्रतिक्रिया कोड -1 था। समस्या यह थी कि REST प्रोग्रामर प्रतिक्रिया कोड 200 वापस करना भूल गया।

मुझे उम्मीद है कि इससे अन्य डेवलपर्स को मदद मिलेगी।


0

जब भी एरर -1005 मिले तो एपीआई अगेन पर कॉल करना होगा।

AFHTTPRequestOperationManager *manager = 
[AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:<example-url>
   parameters:<parameteres>
    success:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSLog(@“Success: %@", responseObject);
  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      NSLog(@"Error: %@", error);
      if (error.code == -1005) {
          // Call method again... 
       }
  }];

फिर से कॉल करने के लिए आपको अपना कोड जोड़ना होगा। MakeSure कि आप कॉल विधि एक बार अन्यथा उसके कॉल पुनरावर्ती लूप थे।


0

सभी उत्तरों के शीर्ष पर मुझे एक अच्छा समाधान मिला। वास्तव में नेटवर्क कनेक्शन से संबंधित समस्या iOS 12 के लिए विफल रहती है क्योंकि iOS 12.0 पर एक बग है। और यह अभी तक हल करने के लिए। जब मैं बैकग्राउंड से आया और नेटवर्क कॉल करने की कोशिश करता है और कनेक्शन स्थापित करने में विफल रहता है, तो मैं एफ़नेटवर्किंग संबंधित मुद्दे के लिए गिट हब समुदाय के माध्यम से चला गया था। मैं इस पर 3 दिन बिताता हूं और इसके लिए मूल कारणों को पाने के लिए कई चीजों की कोशिश करता हूं और कुछ भी नहीं मिला। अंत में मुझे अंधेरे में कुछ प्रकाश मिला जब मैंने इस ब्लॉग को लाल कर दिया https://github.com/AFNetworking/AFNetworking/issues/4279

यह कह रहा है कि आईओएस 12 में एक बग है। मूल रूप से आप नेटवर्क कॉल को कभी पूरा होने की उम्मीद नहीं कर सकते हैं यदि ऐप ओएस अग्रभूमि में नहीं है। और इस बग के कारण नेटवर्क कॉल ड्रॉप हो जाते हैं और हमें लॉग में नेटवर्क विफल हो जाता है।

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

IOS 12 के लिए इस समस्या को हल करने के लिए Apple की प्रतीक्षा न करें क्योंकि अभी भी इसे ठीक करना बाकी है। आप अपने NSURLConnection, NSURLSession या AFNetworking या ALAMOFIRE होने के नेटवर्क अनुरोध के लिए कुछ विलंब प्रदान करके इस समाधान के साथ जा सकते हैं। चियर्स :)


0

शारीरिक डिवाइस के साथ iOS 12 ऐप से अपनी कंपनी के सर्वर का उपयोग करते समय मुझे उसी समस्या का सामना करना पड़ा। समस्या यह थी कि सर्वर हार्ड डिस्क भरी हुई थी। सर्वर में खाली जगह ने समस्या को हल कर दिया।

मुझे एक और स्थिति में वही त्रुटि मिली जो मुझे लगता है कि ऐप्पल ( URLSession.timeoutIntervalForRequestऔर URLSession.timeoutIntervalForResource) द्वारा प्रदान की गई मानक नेटवर्किंग एपीआई के माध्यम से एक टाइमआउट नहीं है । वहाँ भी .. सर्वर का जवाब तेजी से समस्या हल कर दिया

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.