iOS9 स्टोरीबोर्ड क्या अनहैंडल्ड एक्शन है (हैंडलनॉलचंचस्पेक्टेशंस)?


84

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

-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
    handler = remote;
    info = <BSSettings: 0x176a5d90> {
        (1) = 5;
    };
}

Apple का कहना है कि iOS 9 स्थिरता के बारे में है, इसलिए मुझे लगता है कि आपको चिंता नहीं करनी चाहिए ;-) PS मुझे एक ही मुद्दा है, और कुछ अन्य devs भी stackoverflow.com/questions/32344082/…
रोमा

11
यकीन नहीं होता कि यह स्टोरीबोर्ड से संबंधित है, मैं इसे अपने गैर-स्टोरीबोर्ड ऐप में भी देखता हूं।
कोन सेप

क्या निर्माण में कोई अन्य चेतावनी है? शायद यह एक चेतावनी है जो तुच्छ लगती है?
जो सूसिक

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

डिवाइस लॉग को देखते हुए, यह डिवाइस की स्क्रीन को स्वचालित रूप से बंद करने के साथ कुछ करने के लिए हो सकता है। SpringBoard[54] <Warning>: [MPUSystemMediaControls] Disabling lock screen media controls updates for screen turning off.उद्धृत त्रुटि संदेश से ठीक पहले लाइन लॉग की गई है।
क्रिश्चियन

जवाबों:


32

आपके कोड में कुछ भी गलत नहीं है। यह ऐप्पल के लिए एक लॉगिंग संदेश आंतरिक है, और आपको इसके बारे में एक रडार दर्ज करना चाहिए।

दो संकेत हैं जो बताते हैं कि यह संभवतः Apple का कोड है:

  1. विधि के नाम _handleNonLaunchSpecificActions:forScene:withTransitionContext:completionको रेखांकित करने वाला अंडरकोर यह दर्शाता है कि यह विधि उस वर्ग के लिए निजी / आंतरिक है जिसे यह घोषित किया गया है ( यह टिप्पणी देखें ।)

  2. यह अनुमान लगाना उचित है कि दो अक्षर उपसर्ग FBSSceneSnapshotActionFrontBoard के लिए शॉर्टहैंड है, जो कि " iOS 9 विश -लिस्ट: गेस्ट मोड" में रेने रिची के अनुसार, लॉन्चिंग ऐप्स से संबंधित सॉफ्टवेयर के पूरे परिवार का हिस्सा है:

IOS 8 के साथ, Apple ने अपने सिस्टम मैनेजर, स्प्रिंगबॉर्ड को कई छोटे, अधिक केंद्रित घटकों में फिर से बनाया। बैकबॉर्ड के अलावा, जो पहले से ही पृष्ठभूमि कार्यों को संभालने के लिए बंद था, उन्होंने अग्रभूमि कार्यों के लिए फ्रंटबोर्ड को जोड़ा। उन्होंने लॉक स्क्रीन को सुरक्षित, एन्क्रिप्टेड परिस्थितियों में संभालने के लिए प्रीबर्ड को भी जोड़ा। [...]

मुझे पता नहीं है कि BSउपसर्ग किस BSSettingsलिए है, लेकिन

BSके लिए आशुलिपि है BackBoard Settings, और इस लॉग संदेश के विश्लेषण से संकेत मिलता है कि यह आपके द्वारा किए गए कुछ भी नहीं है, और आपको लॉगिंग संदेश को पुन: उत्पन्न करने के लिए कदमों के साथ एक राडार दर्ज करना चाहिए।

यदि आप स्टैक ट्रेस को आज़माना चाहते हैं, तो आप यहां से जुड़ी श्रेणी को लागू कर सकते हैं । कुछ का तर्क होगा कि निजी एपीआई को ओवरराइड करना एक बुरा विचार है, लेकिन इस मामले में स्टैक ट्रेस को हथियाने के लिए एक अस्थायी इंजेक्शन बहुत हानिकारक नहीं हो सकता है।

संपादित करें:

लेकिन, हम अब भी जानना चाहते हैं कि यह क्रिया क्या है। इसलिए मैंने एक ब्रेकपॉइंट लगाया -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]और रजिस्टर मूल्यों को छापना शुरू किया और एक वर्ग पाया, FBSceneImplजिसमें मेरे आवेदन के बारे में पूरी जानकारी थी:

स्थल

हम यह पता लगाने में सक्षम हैं कि किस निजी विधि को अगले कहा जाता है ( प्रोग्राम काउंटर, इंस्ट्रक्शन पॉइंटर, रजिस्टर 15. में संग्रहीत )

कार्यक्रम गणक

मैंने FBSceneSnapshotActionलॉग में अन-हैंडल किए गए संदर्भ को खोजने की कोशिश की , लेकिन कोई पासा नहीं। फिर, मैंने UIApplication, और overrode को उपवर्गित किया _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion। अब मैं सीधे कार्रवाई करने में सक्षम था, लेकिन फिर भी, हम नहीं जानते कि यह क्या है।

फिर, मैंने FBSceneSnapshotAction को फिर से देखा। यह एक सुपरक्लास कहा जाता है BSAction

फिर मैंने RuntimeBrowser के समान एक उपकरण लिखा और BSAction के सभी उपवर्गों को देखा। यह पता चला है कि उनमें से एक सूची है:

कार्रवाई की सूची

हमारे पास जो दो विधि नाम हैं (लॉग में से एक और डिवाइस पर प्रोग्राम काउंटर से) यह इंगित करता है कि इन कार्यों का उपयोग सिस्टम के चारों ओर गुजरने वाली क्रियाओं के लिए हुड के तहत किया जाता है।

कुछ कार्यों को संभवत: ऐप के प्रतिनिधि के कॉलबैक में भेज दिया जाता है, जबकि अन्य को आंतरिक रूप से नियंत्रित किया जाता है।

यहाँ क्या हो रहा है कि एक ऐसी कार्रवाई है जिसे सही तरीके से नहीं किया गया है और सिस्टम इसे देख रहा है। हम इसे स्पष्ट रूप से देखने वाले नहीं थे।


अच्छी जांच लेकिन यहां कुछ दिलचस्प है, मुझे निजी Apple एपीआई का उपयोग करते समय सटीक ओपी त्रुटि मिल रही है। मुझे लगता है कि जब से मैं निजी एपीआई का उपयोग कर रहा हूं तब मुझे शायद Apple इंजीनियरों के लिए कंसोल लॉग मिल रहा है।
OhadM

1
@Moshe Apple ने आपकी ओर से जांच के लिए आपको कितना भुगतान किया? लेकिन वे इसमें दिलचस्पी नहीं ले सकते। : पी
कोडेलनर

"इसके बारे में रडार दर्ज करें" का क्या मतलब है?
पॉल मासरी-स्टोन

इसका मतलब Apple के बग रिपोर्टर टूल के साथ बग रिपोर्ट दर्ज करना है।
मोशे

12

AFAIK, ऊपर दी गई जानकारी स्क्रीन को स्नैपशॉट के दौरान आईओएस से संबंधित है (मुझे लगता है कि डबल क्लिक होम मल्टीटास्क संबंधित व्यवहार के लिए)। मैंने गहराई से अपने आवेदन की जांच की और लगता है कि इसे कोई साइड व्यवहार नहीं मिलता है। आप इसे अभी के लिए सुरक्षित रूप से अनदेखा कर सकते हैं।

उपरोक्त फ़ंक्शन के लिए कॉल के खिलाफ खुद का परीक्षण करने के लिए आप निम्नलिखित सरल श्रेणी का उपयोग कर सकते हैं :


1

मुझे यह समझ में आ गया है, यह तब होगा जब आपके पास .h या .m फ़ाइल में घोषित IBAction मेथड है लेकिन आपने इसे किसी नियंत्रण में नहीं बाँधा है।

.m उदाहरण:

- (IBAction)click:(id)sender{
}

लेकिन इस विधि को स्टोरीबोर्ड में किसी भी नियंत्रण को नहीं सौंपा गया है।


मेरे ऐप में ऐसा नहीं है - मेरे पास कोई अनबाउंड IBActions नहीं है, और मुझे यह संदेश भी मिला है। मेरा ऐप हालांकि एक स्विफ्ट ऐप है।
हेनरिकस्ट्रोम

1

पता नहीं क्यों यह मेरे ऐप में होता है, लेकिन कम से कम आप अपवाद को पकड़ सकते हैं, अगर आप इसे अपने लॉग पान में पॉपिंग से रखना चाहते हैं। यह एक समाधान नहीं है, लेकिन यह आपको अधिक जानकारी दे सकता है कि यह किसी भी तर्क को पकड़ने में खुश है जो इसे पारित कर रहा है।

स्विफ्ट 2 संस्करण:

import UIKit

extension UIApplication {
    func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler: () -> Void) {
        //whatever you want to do in this catch
        print("handleNonLaunchSpecificActions catched")
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.