2016-02-25 10 views
10

का उपयोग करके शेयर एक्सटेंशन के लिए सफलता/विफल कॉलबैक नहीं प्राप्त करना मुझे शेयर एक्सटेंशन में AFNetworking के साथ कोई समस्या है। didSelectPost में, मैं फोन कर रहा हूँ:AFNetworking

[[AuthClient sharedClient] POST: @"/v1/events" 
    parameters: params success:^(AFHTTPRequestOperation * operation, id responseObject) { 
     [self.extensionContext completeRequestReturningItems: nil completionHandler: nil]; 
    } 
    failure:^(AFHTTPRequestOperation * operation, NSError * error) { 
     NSLog(@"error: %@", error); 
     [self.extensionContext cancelRequestWithError: error]; 
    } 
]; 

[AuthClient sharedClient] सिंगलटन पैटर्न का उपयोग करता एक पृष्ठभूमि पहचानकर्ता के साथ NSURLSessionConfiguration सेट के साथ AFHTTPSessionManager का एक उदाहरण मिलता है।

हालांकि, न तो सफलता या विफलता कॉलबैक का आह्वान किया जाता है और यह विस्तार तब तक अनिश्चित काल तक लटका रहता है जब तक कि विस्तार नहीं हो जाता। दिलचस्प बात यह है कि HTTP अनुरोध सर्वर पक्ष पर ठीक खत्म हो जाता है; पूरा होने पर कभी भी नहीं आ जाता है।

+0

क्यों आप नई एएफएन कक्षा का प्रयास नहीं करते? –

+0

क्या आप डीबगर में रोक सकते हैं और अपने सभी स्टैक देख सकते हैं? देखें कि उनमें से 2 एक ही लॉक लेने की कोशिश कर रहे हैं या नहीं। (या तो अन्य 'ताले) – nielsbot

उत्तर

4

मुझे लगता है कि समस्या AFNetworking के साथ नहीं है लेकिन समस्या उस सिंगलटन क्लास के साथ है। आपने अपने ऐप के आर्किटेक्चर को निर्दिष्ट नहीं किया है, लेकिन मुझे लगता है कि, आप एक ही समय में उसी [AuthClient sharedClient] सिंगलटन का उपयोग करके विभिन्न एपीआई नियंत्रकों में एकाधिक एपीआई कॉल कर सकते हैं। इसलिए, आप वास्तव में success कॉल प्राप्त कर रहे हैं लेकिन उपर्युक्त कॉल के लिए नहीं बल्कि कुछ आपके नियंत्रक में कहीं भी हैं। मुझे अपने UITabbarController आधारित एप्लिकेशन में सटीक समस्या का सामना करना पड़ा है जहां मैं विभिन्न दृश्य नियंत्रकों के viewDidLoad में एपीआई कॉल कर रहा था और मेरा परीक्षक लगातार सभी टैब बदल रहा था। इस प्रकार, मैंने प्रथम दृश्य नियंत्रक (प्रथम टैब) के लिए प्रतिक्रिया प्राप्त करने का प्रयास किया और दूसरे दृश्य नियंत्रक (2 टैब) में प्रतिक्रिया प्राप्त करने के लिए उपयोग किया, जो गलत था!

+0

सहमत हैं ... शायद सफलता ब्लॉक में एक एनएसएलओजी() लाइन चिपकाने के लिए यह सत्यापित करने के लिए कि उन्हें बुलाया नहीं जा रहा है। चूंकि आप एक सिंगलटन पर एक इंस्टेंस वैरिएबल का उपयोग कर रहे हैं, वहां केवल 1 एक्सटेंशन संदर्भ हो सकता है, इसलिए यदि यह संभव है कि एक कॉल उड़ान में हो सकता है जब कोई दूसरा निकाल दिया जाता है; तो कॉलबैक प्राप्त करने वाली केवल एक चीज होगी। – Fiid

+0

लॉगिंग मदद नहीं की, लेकिन मुद्दा सिंगलटन के साथ था। ऐप-विशिष्ट विवरण में नहीं जाएंगे, लेकिन यह मुझे सही रास्ते पर रखेगा – iMack

1

1) डाकिया में इस अनुरोध को निष्पादित, के लिए सही तरीके से और मापदंडों की जांच, अगर ठीक करने की कोशिश करो -> 2.

2) इस

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 

// Initialize Session Manager 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration]; 
इस पर

तरह सत्र विन्यास का उपयोग करने का प्रयास करें बिंदु हम मान सकते हैं कि आपके सिंगलेटोन को विभिन्न विन्यास के साथ एक अन्य अनुरोध के लिए शुरू किया गया था।

3) similar problem

4) about AFNetworking background

पी.एस. मैं कोशिश करता हूँ सरल अतुल्यकालिक प्रतिक्रिया

1

कुछ बातें इंतजार कर रहे हैं, जबकि स्पिनर के साथ, मुख्य थ्रेड पर उपयोग करने के लिए प्रयास करें:

  • एक नेटवर्क का पता लगाने के साथ एक मानसिक स्वास्थ्य की जांच करते हैं; और सुनिश्चित करें कि आपके द्वारा डेटा क्लाइंट तक पहुंच रहा है।
  • ब्रेकपॉइंट सेट करें और किसी भी अवरुद्ध धागे या विसंगतियों (यहां तक ​​कि ऐप्पल नेटवर्किंग एपीआई या तो सीएफनेटवर्किंग या एनएसआरएलएसशन इत्यादि) को तोड़ने पर विचार करें।
  • जांचें कि लैम्ब्डा/समापन ब्लॉक आपके सिंगलटन ऑब्जेक्ट द्वारा उचित रूप से सेट/बनाए रखा जा रहा है/सिंगलटन का उपयोग किए बिना एक सरल परीक्षण दिनचर्या लिखने का प्रयास करें ताकि यह देखने में कोई फर्क पड़ता है (जैसे मैन्युअल रूप से कक्षा को तुरंत चालू करना और उपयोग करना यह)।
  • स्निपेट से यह स्पष्ट नहीं है कि 'सफलता' पूरा करने वाला हैंडलर एक डीबग संदेश प्रिंट करता है - अगर कोई पहले से ही हैंडलर में नहीं है, तो वहां एक एनएसएलओजी भी जोड़ने पर विचार करें।

उम्मीद है कि इनमें से कुछ आपको समस्या का कारण बनने के विचार के करीब ला सकते हैं।