iOS 10: "[ऐप] यदि हम वास्तविक पूर्व-प्रतिबद्ध हैंडलर में हैं तो हम वास्तव में सीए प्रतिबंध के कारण कोई नया बाड़ नहीं जोड़ सकते हैं"


389

मुझे कभी-कभी यह संदेश Xcode 8b3 के लॉग में मिलता है, जब मेरा ऐप चलता है, सब कुछ काम करने लगता है, लेकिन मैं जानना चाहता हूं कि यह कहां से आता है। Google ने बिल्कुल भी मदद नहीं की।


2
क्या आप UINavigationController प्रतिनिधि पद्धति को कॉल कर रहे हैं: मजेदार नेविगेशनController (नेविगेशनकंट्रोलर: UINavigationController, willShowViewController दृश्य नियंत्रक: UIViewController, एनिमेटेड: बूल {}?
नॉर्मन जी

2
willShowViewController कभी नहीं कहा जाता है, नहीं ...
प्रफुल्लित करने वाला

मुझे वही मिलता है। मैं SpriteKit और SceneKit का उपयोग कर रहा हूं और उन पर संदेह करता हूं!
हावर्ड लोवेट

3
किसी ने भी बग रिपोर्ट दर्ज की? मै लगभग।
डेविड डेलमोंट

1
कृपया इस उत्तर पर एक नज़र डालें। stackoverflow.com/a/39997761/6602495
स्नेहा

जवाबों:


285

अपने Xcode में:

  • स्टॉप बटन के ठीक बगल में अपनी सक्रिय योजना के नाम पर क्लिक करें
  • एडिट स्कीम पर क्लिक करें…।
  • रन (डीबग) में तर्क टैब का चयन करें
  • पर्यावरण चर में + क्लिक करें
  • चर जोड़ें: OS_ACTIVITY_MODE = अक्षम करें

स्क्रीनशॉट


4
अतिरिक्त जानकारी के लिए धन्यवाद
amergin

26
ध्यान रखें कि मैं अनियमित रूप से कंसोल में कोई NSLog आउटपुट नहीं पा रहा था और इसे ठीक करने के लिए इसे फिर से हटा दिया। यह सेब पर गुंडों द्वारा हमारे अधीन की गई 'उच्च श्रेणी' की प्रोग्रामिंग है।
अमेरिकी

37
जब यह लायक है, तो मुझे यह संदेश मिलता है कि जब भी कोई अभिविन्यास परिवर्तन किया जाता है और मेरे पास OS_ACTIVITY_MODE उपयोगकर्ता चर अक्षम है।
user2698617

5
नोट: इसे जोड़ने पर आप NSLogs को कंसोल में भी नहीं देख पाएंगे।
niravdesai21

4
क्या यह फायर अलार्म बंद करने जैसा नहीं है?
स्कॉट्टीब्लाड्स

191

यह इससे आता है +[UIWindow _synchronizeDrawingAcrossProcessesOverPort:withPreCommitHandler:] os_log API के माध्यम । यह अन्य घटकों / रूपरेखाओं पर निर्भर नहीं करता है जिनका आप उपयोग कर रहे हैं (केवल UIKit से) - यह बदलते इंटरफ़ेस अभिविन्यास पर स्वच्छ एकल दृश्य अनुप्रयोग परियोजना में पुन: पेश करता है।

इस विधि में 2 भाग हैं:

  1. हाथ से चलने वालों की सूची में उत्तीर्ण प्रीक्मिट हैंडलर जोड़ना;
  2. कुछ काम करो, जो वर्तमान परिमित राज्य मशीन राज्य पर निर्भर करता है।

जब दूसरा भाग विफल हो जाता है (निषिद्ध संक्रमण जैसा दिखता है), तो यह त्रुटि संदेश को ऊपर लॉग इन करता है। हालांकि, मुझे लगता है कि यह समस्या घातक नहीं है: इस पद्धति में 2 अतिरिक्त जोरदार मामले हैं, जिससे डिबग में दुर्घटना हो सकती है।

लगता है कि रडार सबसे अच्छा हम कर सकते हैं।


1
क्या आप इस निजी विधि का नाम और उसकी संरचना प्राप्त करने के लिए डिबगिंग के लिए इस्तेमाल किए जाने वाले औजारों का इस्तेमाल कर सकते हैं?
ऑलेक्ज़ेंडर कराबेरोव

9
@AlexanderKaraberov आप फ्रेमवर्क बाइनरी में चेतावनी पाठ खोजने के लिए हॉपर डिस्सेम्बलर का उपयोग कर सकते हैं और निजी पद्धति से इस पाठ का संदर्भ ले सकते हैं।
k06a

मुझे यह भी मिलता है जब कीबोर्ड स्क्रॉल करता है और मेरे पास इसके विचारों को आकार देने के द्वारा जवाब देने के लिए एक नियंत्रक सदस्यता होती है।
yo.ian.g

82

environment variablesइस योजना के तहत निम्नलिखित लगाने की कोशिश करेंrun(debug)

OS_ACTIVITY_MODE = disable

हार्डवेयर-> रोटेट मेनू आइटम का उपयोग करके iPhone 7 को घुमाते समय मुझे यह सिम्युलेटर में मिला। इस पर्यावरण चर ने सहज संदेश को दूर कर दिया।
जॉर्ज डी गिर्टन

1
नीचे दिए गए @Foo से उत्तर उपयोगी है क्योंकि इसमें विवरण कैसे शामिल हैं।
केविन ओवंस

1
यह बाधा चेतावनी लॉग भी नहीं छापता है
चिराग शा

36
ओपी ने पूछा कि संदेश कहां से आता है। सिर्फ यह कहना कि चुप रहना कैसे सही जवाब नहीं है।
इराम्बा

6
"IOS_ACTIVITY_MODE = अक्षम" उत्तर सभी लॉगिंग को बंद कर देता है! यदि आप लॉग नहीं देखना चाहते हैं तो लॉगिंग दृश्य को बंद करें। वास्तव में हास्यास्पद जवाब, आश्चर्यजनक है कि इसमें बहुत सारे वोट हैं! वास्तविक संदेश को संबोधित करने के लिए कुछ भी नहीं करता है। कोर डेटा का भारी उपयोग करने वाले हमारे ऐप ठीक काम करते हैं, ये संदेश और अन्य पिछले Xcode अपडेट के बाद दिखाई देने लगे। दुख की बात है कि Apple इस प्रकार के मुद्दों को हल नहीं कर सकता है।
जॉन

13

हम इसे इस तरह से म्यूट कर सकते हैं (डिवाइस और सिम्युलेटर को विभिन्न मूल्यों की आवश्यकता है):

नाम OS_ACTIVITY_MODEऔर मान जोड़ें ${DEBUG_ACTIVITY_MODE}और इसे जांचें (उत्पाद में -> योजना -> योजना संपादित करें -> भागो -> तर्क -> पर्यावरण)।

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

उपयोगकर्ता-निर्धारित सेटिंग DEBUG_ACTIVITY_MODEजोड़ें, फिर इसके Any iOS Simulator SDKलिए Debugमूल्य निर्धारित करें disable(प्रोजेक्ट में -> सेटिंग बनाएं -> + -> उपयोगकर्ता-परिभाषित सेटिंग)

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


मेरे लिए काम नहीं किया: मैं यह कंसोल में भी देख रहा हूं, पहले से ही डिबग गतिविधि मोड को अक्षम करने के बावजूद जैसा कि ऊपर सुझाया गया है।
जोहान

-1

ठीक करने के लिए, मैंने सिम्युलेटर से ऐप हटा दिया।

मैंने भी पहले क्लीन रन किया ।

मुझे नहीं लगता कि कुछ भी अभिविन्यास-संबंधित इसे ट्रिगर करता है। इस लक्षण के शुरू होने से पहले सबसे बड़ी बात यह है कि एक स्विफ्ट फ्रेमवर्क ने NSLogमुख्य धागे के बजाय श्रमिक धागे को कॉल करना शुरू कर दिया ।


1
जब मैंने इसे घुमाए बिना सिम्युलेटर में चलाया तो मेरे लिए पहली बार में एक साफ काम करना ठीक था, लेकिन फिर जैसे ही मैंने रोटेशन कमांड के साथ फिर से परीक्षण किया, उसने उसी त्रुटि की सूचना दी।
१२

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

-8
OS_ACTIVITY_MODE = disable

यह वास्तविक उपकरणों में डिबग करने की क्षमता को भी अक्षम कर देगा (तब से वास्तविक उपकरणों से कोई कंसोल आउटपुट नहीं)।


6
आपने अभी पहले वाले उत्तर (कम विवरण के साथ)
एश्ली मिल्स

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