2015-11-14 18 views
27

मैं एक अजीब बग हो रही है:आईओएस 9: क्रैश पर - [_ NSXPCDistantObject methodSignatureForSelector:]

घातक अपवाद: NSInvalidArgumentException *** - [_ NSXPCDistantObject methodSignatureForSelector:]: नहीं प्रोटोकॉल कनेक्शन पर स्थापित किया गया है कनेक्शन सेवा के लिए नामित किया गया com.apple.nsurlsessiond "

यह समस्या केवल प्रकट होता है स्टैक ट्रेस के अनुसार आईओएस 9. पर हो रहा हो सकता है, बग -[UIApplication _sendWillEnterForegroundCallbacks] के लिए एक कॉल से शुरू हो रहा है।

Thread : Fatal Exception: NSInvalidArgumentException 
0 CoreFoundation     6485512008 __exceptionPreprocess 
1 libobjc.A.dylib    6833323904 objc_exception_throw 
2 CoreFoundation     6485511824 -[NSException initWithCoder:] 
3 Foundation      6500536092 -[_NSXPCDistantObject methodSignatureForSelector:] 
4 CoreFoundation     6485526892 ___forwarding___ 
5 CoreFoundation     6484495532 _CF_forwarding_prep_0 
6 CoreFoundation     6485141004 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ 
7 CoreFoundation     6485138988 _CFXRegistrationPost 
8 CoreFoundation     6485138348 ___CFXNotificationPost_block_invoke 
9 CoreFoundation     6485554212 -[_CFXNotificationRegistrar find:object:observer:enumerator:] 
10 CoreFoundation     6484354836 _CFXNotificationPost 
11 Foundation      6500543948 -[NSNotificationCenter postNotificationName:object:userInfo:] 
12 UIKit       6577878356 -[UIApplication _sendWillEnterForegroundCallbacks] 
    continues ... 

तो ऐसा लगता है कि जब ऐप अग्रभूमि में प्रवेश करेगा, तो कुछ पर्यवेक्षक पंजीकृत nsurlsessiond से आरपीसी के माध्यम से फिर से जुड़ने की कोशिश करता है और विफल रहता है? मैं NSURLSession का उपयोग कर पृष्ठभूमि हस्तांतरण सत्र करता हूं, लेकिन मैं इसे पुन: उत्पन्न करने में असमर्थ हूं इसलिए मुझे यकीन नहीं है कि यह संबंधित है या नहीं।

क्या किसी ने इस मुद्दे को पहले देखा है? क्या मैं इसे संबोधित करने के लिए कुछ भी कर सकता हूं?

+3

अधिसूचना केंद्र और NSInvalidArgumentException के संबंध में आईओएस 9 पर बहुत सारी क्रैश रिपोर्टें हुई हैं। ऐसा लगता है कि जब ऐप पृष्ठभूमि में होता है तो क्रैश होता है और ऑपरेटिंग सिस्टम ऐप को नष्ट करता है जबकि कुछ डेटा अभी भी संसाधित हो रहा है। सुनिश्चित नहीं है कि यह वही बग है जिसका आप सामना कर रहे हैं। –

उत्तर

10

ऐसा लगता है कि आईओएस में एक बग यहाँ वर्णित: https://forums.developer.apple.com/thread/45651#140745

AFAICT इस क्रैश NSURLSession की पृष्ठभूमि सत्र समर्थन के कारण होता है। यह NSXPCConnection (आईओएस एसडीके का हिस्सा नहीं है, लेकिन ओएस एक्स पर सार्वजनिक एपीआई का उपयोग करके अपने डिमन (nsurlsessiond) पर काम करता है, ताकि आप वहां इसके बारे में पढ़ सकें)। NSXPCConnection में बाधित कनेक्शन की धारणा है, यानी, क्लाइंट और सर्वर के बीच आईपीसी कनेक्शन टूटा हुआ है लेकिन फिर से स्थापित किया जा सकता है। NSRLSession के पृष्ठभूमि सत्र समर्थन, सभी NSXPCConnection क्लाइंट की तरह, इन बाधाओं को निश्चित रूप से संभालना चाहिए। हां, ऐसा करने में एक बग है। यह बग एक दौड़ की स्थिति है जो खुद को इस दुर्घटना के रूप में प्रकट करती है। हम भविष्य में ओएस रिलीज में इसे ठीक करने की उम्मीद करते हैं लेकिन मैं किसी भी ठोस विवरण साझा नहीं कर सकता।

+0

लिंक अमान्य होने पर आपको लिंक की सामग्री के साथ वास्तव में अपना उत्तर संपादित करना चाहिए। जैसा कि यह खड़ा है, यह एक लिंक केवल जवाब है – JAL

0

ऐसा प्रतीत होता है कि UIApplicationWillEnterForeground अधिसूचनाओं की सदस्यता लेने वाली कुछ चीज़ों को बिना सब्सक्राइब किए बिना हटा दिया गया था या अपेक्षित इंटरफ़ेस मौजूद नहीं है।

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

methodSignatureForSelector पर विफल होने से संकेत मिलेगा कि NSNotificationCenter उस विधि को अधिसूचना के साथ कॉल करना चाहता है लागू नहीं किया गया है। एक लापता विधि, या एक टाइपो हो सकता है।

+0

उत्तर के लिए धन्यवाद। मुद्दा यह है कि मैं 'UIAplplicationWillEnterForeground' का उपयोग नहीं करता, बल्कि ऐसा लगता है कि ऐप्पल आंतरिक रूप से अपवाद पाठ के कारण आंतरिक रूप से उपयोग कर रहा है जो' nsurlsessiond' का उल्लेख करता है। – bcattle

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