"यह एप्लिकेशन एक पृष्ठभूमि थ्रेड से ऑटोलेयूट इंजन को संशोधित कर रहा है" त्रुटि?


310

तेजी से मेरे ओएस एक्स में इस त्रुटि का सामना कर रहा है:

"यह एप्लिकेशन पृष्ठभूमि थ्रेड से ऑटोलेयूट इंजन को संशोधित कर रहा है, जिससे इंजन भ्रष्टाचार और अजीब क्रैश हो सकता है। यह भविष्य में रिलीज में अपवाद का कारण बनेगा।"

मेरे पास मेरा NSWindow है और मैं contentViewखिड़की से दृश्यों में स्वैप कर रहा हूं । जब मैं कोशिश करता हूं और खिड़की पर, या जब मैं खिड़की से जोड़ता हूं तो मुझे त्रुटि मिलती है । ऑटोरेस्पोर्ग सामान को अक्षम करने की कोशिश की, और मेरे पास ऑटो लेआउट का उपयोग करने के लिए कुछ भी नहीं है। कोई विचार?NSApp.beginSheetsubview

कभी-कभी यह ठीक है और कुछ भी नहीं होता है, अन्य बार यह पूरी तरह से मेरी UIऔर कुछ भी नहीं लोड करता है


2
किसी कारण से नीचे एक उत्कृष्ट उत्तर हटा दिया गया था: github.com/nrbrook/NBUIKitMainThreadGuard
Fattie

मुझे कम से कम दो घंटे बचाया। धन्यवाद @ फटी
oyalhi

सही @ गोभी। इसका उपयोग करने में सावधानी बरतें, मुझे वास्तव में बहुत मज़ा आया लेकिन फिर अन्य समस्याएं भी थीं - यह एक कठिन क्षेत्र है! आशा है ये मदद करेगा!
फटी

जवाबों:


638

इसे एक अलग थ्रेड के अंदर रखा जाना चाहिए जो थ्रेड फंक्शन के पूरा होते ही यूआई को अपडेट करने की अनुमति देता है:

आधुनिक स्विफ्ट:

DispatchQueue.main.async {
    // Update UI
}

स्विफ्ट के पुराने संस्करण, प्री स्विफ्ट 3।

dispatch_async(dispatch_get_main_queue(){
    // code here
})

उद्देश्य सी:

dispatch_async(dispatch_get_main_queue(), ^{
    // code here
});

3
ऑब्जेक्टिव सी में यह काम करने के लिए, कोड ब्लॉक में {(शून्य) से पहले कोड और एक अर्धविराम के बाद पासवर्ड डालें।
अवांस

4
हालांकि यह चोट नहीं करता है, ^ (शून्य) के बजाय बस ^ आवश्यक नहीं है। उत्तर का ऑब्जेक्टिव-सी संस्करण ठीक है।
केलर

2
यह मेरे लिए ठीक काम करता है। मेरी समस्या के लिए, एक नेटवर्क अनुरोध करें, और सफलता समापन ब्लॉक के अंदर मैंने यूआई को अपडेट करने के लिए फ़ंक्शन कहा। चूंकि UIKit थ्रेड सुरक्षित नहीं है, इसलिए UI को अपडेट करने के लिए मुख्य थ्रेड को वापस भेजना होगा।
राहेल

1
@Naishta द्वारा जवाब स्विफ्ट 3 समाधान के लिए देखें
नथानिएल

1
स्विफ्ट 3 के लिए: DispatchQueue.main.async () { code }, जैसा कि
smukamuka

146

आपको 'dispatch_async' का उपयोग किए बिना प्रिंट स्टेटमेंट के साथ डीबग करते समय समान त्रुटि संदेश मिलता है, इसलिए जब आपको वह त्रुटि संदेश मिलता है, तो उसका उपयोग करने का समय

स्विफ्ट 4

DispatchQueue.main.async { //code }

स्विफ्ट 3

DispatchQueue.main.async(){ //code }

पहले स्विफ्ट संस्करण

dispatch_async(dispatch_get_main_queue()){ //code }

5
क्योंकि सिंटैक्स गलत है, होना चाहिए: dispatch_async(dispatch_get_main_queue(), ^{ /* UI related code */ });संपादित करें: मैंने उसका जवाब अपडेट किया, सिंटैक्स स्वरूपण वहाँ बेहतर काम करता है।
ज़ोल्टन

1
या, जब किसी क्लोजर के अंदर, बैकग्राउंड थ्रेड से मेनह्रेड पर जाएं। इसका उपयोग करें: self.performSelectorOnMainThread (चयनकर्ता ("yourFunction:"), withObject: 'yourAray / yourObject', WaitUntilDone: true)
Naishta

1
नहीं, नहीं, वाक्यविन्यास पर एक नजर है
Naishta

82

"यह एप्लिकेशन एक पृष्ठभूमि थ्रेड से ऑटोलेयूट इंजन को संशोधित कर रहा है" त्रुटि को वास्तविक समस्या के बाद लंबे समय तक कंसोल में लॉग किया जाता है, इसलिए ब्रेकपॉइंट का उपयोग किए बिना इसे डीबग करना कठिन हो सकता है।

मैंने अपनी समस्या का पता लगाने के लिए @ markussvensson के उत्तर का इस्तेमाल किया और इसे इस प्रतीकात्मक ब्रेकपॉइंट (डिबग> ब्रेकप्वाइंट> क्रिएट सिम्बोलिक ब्रेकपॉइंट का उपयोग करके पाया ):

  1. प्रतीक: [UIView layoutIfNeeded]या[UIView updateConstraintsIfNeeded]
  2. स्थिति: !(BOOL)[NSThread isMainThread]

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

एप्लिकेशन को एमुलेटर पर बनाएं और चलाएं और उन चरणों को दोहराएं जो एरर मैसेज फेंके जा रहे हैं (ऐप सामान्य से अधिक सशक्त होगा!)। Xcode तब ऐप को बंद कर देगा और कोड की लाइन को चिह्नित करेगा (जैसे एक func की कॉल) जो पृष्ठभूमि थ्रेड से UI तक पहुंच रहा है।


3
हम्म। मैंने इसे उकेरा, क्योंकि यह समझ में आता था। हालांकि, निष्पादन नहीं टूटता है और मुझे अभी भी अपने लॉग में त्रुटि मिलती है। क्या ऐसी अन्य परिस्थितियाँ हैं जिनका मैं प्रतीकात्मक विराम बिंदु सेट करने के लिए उपयोग कर सकता हूँ?
साजाकेलिन

मेरे मामले में, यह टूटता है। हालाँकि स्टैक ट्रेस मुझे कोई संकेत नहीं देता है जो देखने के लिए जिम्मेदार है। और मुझे पता नहीं है कि दिखाए गए कोडांतरक कोड की व्याख्या कैसे करेंmovq 0x10880ba(%rip), %rsi ; "_wantsReapplicationOfAutoLayoutWithLayoutDirtyOnEntry:"
रेइनहार्ड मर्नरर

क्या यह डिबगिंग के समय ऐप को गंभीरता से चलाने का कारण नहीं होगा?
इटाची

@ इताची हां। पता नहीं कैसे स्पीडअप करना है।
k06a

2
Xcode 9 से शुरू होकर यह बिल्ट-इन फीचर है। बस यह सुनिश्चित करें कि "मेन थ्रेड चेकर" विकल्प स्कीम सेटिंग्स के "डायग्नोस्टिक्स" टैब में सक्षम है
एंड्रयूपी

24

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

आपको उन विधियों को लपेटने की ज़रूरत है जो मुख्य कतार को पाने के लिए UI अपडेट को डिस्पैच_साइनच के साथ कॉल करते हैं। उदाहरण के लिए:

dispatch_async(dispatch_get_main_queue(), { () -> Void in
   self.friendLabel.text = "You are following \(friendCount) accounts"
})

EDITED - स्विफ्ट 3:

अब, हम अगले कोड का पालन कर सकते हैं:

// Move to a background thread to do some long running work
DispatchQueue.global(qos: .userInitiated).async {
   // Do long running task here
   // Bounce back to the main thread to update the UI
   DispatchQueue.main.async {
      self.friendLabel.text = "You are following \(friendCount) accounts"
   }
}

23

मेरे लिए, यह त्रुटि संदेश Admob SDK के बैनर से उत्पन्न हुआ है।

मैं एक सशर्त ब्रेकपॉइंट सेट करके "वेबथ्रेड" की उत्पत्ति को ट्रैक करने में सक्षम था।

सशर्त ब्रेकपॉइंट यह पता लगाने के लिए कि पृष्ठभूमि थ्रेड से ui कौन अपडेट कर रहा है

तब मैं बैनर के निर्माण को बंद करके इस मुद्दे से छुटकारा पाने में सक्षम था:

dispatch_async(dispatch_get_main_queue(), ^{
   _bannerForTableFooter = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait];
   ...
}

मुझे नहीं पता कि इसने मदद क्यों की क्योंकि मैं यह नहीं देख सकता कि इस कोड को गैर-मुख्य-थ्रेड से कैसे बुलाया गया था।

आशा है कि यह किसी की मदद कर सकता है।


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

1
AdMob के नवीनतम संस्करण में अद्यतन करने से मेरे लिए यह समस्या हल हो गई
JH95

मुझे इस तरह एक प्रतीकात्मक ब्रेकपॉइंट पर ब्रेक मिलता है, लेकिन कोड नहीं दिखाया गया है। :(
विक्टर एंगेल

20

IOS 9 SDK को अपडेट करने के बाद से मुझे यह समस्या थी जब मैं एक ब्लॉक को कॉल कर रहा था जिसने एक NSURLConnection async अनुरोध पूरा करने वाले हैंडलर के भीतर UI अपडेट किया। Dispatch_main_queue का उपयोग करके एक प्रेषण कॉल में एक प्रेषण कॉल को लाना समस्या को हल करता है।

यह iOS 8 में ठीक काम किया।


10

एक ही समस्या थी क्योंकि मैं उपयोग कर रहा था performSelectorInBackground


नहीं, मुझे पृष्ठभूमि में चीजें करने की जरूरत है। मैंने NSNotificationCenter कॉल को dispatch_async (dispatch_get_main_queue () विधि के अंदर रखा और इसने काम किया।
बॉबी

मुझे URLSessionDelegate से डेटा मिल रहा था, जिसने तब NSNotification को एक UIViewController अधिसूचना का जवाब दिया और उसमें मैंने उपयोगकर्ता को दिखाने के लिए DispatchQueue.main.async का उपयोग किया यदि डेटा अच्छा था या नहीं। गलत! - समाधान को मुख्य कतार में अधिसूचना में रखा गया है। DispatchQueue.main.async {NotificationCenter.default.post (नाम: NSNotification.Name (rawValue: networkNotificationNames.products.rawValue), वस्तु: स्वयं, userInfo: [networkNotificationNames.products.rawValue: productlist])}
iCyberPaul

7

आपको मुख्य धागे से यूआई को बदलना नहीं चाहिए! UIKit थ्रेड सुरक्षित नहीं है, जिससे कि उपरोक्त समस्या और कुछ अन्य अजीब समस्याएं भी उत्पन्न होंगी यदि आप ऐसा करते हैं। ऐप क्रैश भी कर सकता है।

तो, UIKit संचालन करने के लिए, आपको ब्लॉक को परिभाषित करने की आवश्यकता है और इसे मुख्य कतार पर निष्पादित किया जाना चाहिए: जैसे कि,

NSOperationQueue.mainQueue().addOperationWithBlock {

}

यह Xcode 7.2 और iOS 9.2 में उपलब्ध नहीं है। कोई अन्य विकल्प?
जयप्रकाश दुबे

7

जाहिर है आप बैक ग्राउंड थ्रेड पर कुछ यूआई अपडेट कर रहे हैं। कैंट अपने कोड को देखे बिना, बिल्कुल सटीक भविष्यवाणी करता है।

ये कुछ स्थितियाँ हैं जो हो सकती हैं: -

आप बैकग्राउंड थ्रेड पर कुछ कर रहे होंगे और उपयोग नहीं कर रहे होंगे। एक ही फ़ंक्शन में होने के कारण यह कोड स्पॉट करना आसान है।

DispatchQueue.main.async { // do UI update here }

बैकग्राउंड थ्रेड पर एक फेक डूइंग वेब रिक्वेस्ट कॉलिंग और इसके पूरा करने वाले हैंडलर को अन्य फन को यूआई अपडेट करते हुए कॉल करना। इस कोशिश को चेक करने के लिए कोड को हल करें जहां आपने वेबरेक्स्ट कॉल के बाद यूआई को अपडेट किया है।

// Do something on background thread
DispatchQueue.global(qos: .userInitiated).async {
   // update UI on main thread
   DispatchQueue.main.async {
                // Updating whole table view
                self.myTableview.reloadData()
            }
}

5

"यह एप्लिकेशन एक पृष्ठभूमि थ्रेड से ऑटोलॉयट इंजन को संशोधित कर रहा है" के साथ मुख्य समस्या यह है कि वास्तविक समस्या होने के बाद इसे लंबे समय तक लॉग किया जा सकता है, इससे समस्या निवारण में बहुत मुश्किल हो सकती है।

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

डिबग> ब्रेकप्वाइंट> प्रतीकात्मक ब्रेकपॉइंट बनाएं ...

ब्रेकपॉइंट 1:

  • प्रतीक: -[UIView setNeedsLayout]

  • स्थिति: !(BOOL)[NSThread isMainThread]

ब्रेकपॉइंट 2:

  • प्रतीक: -[UIView layoutIfNeeded]

  • स्थिति: !(BOOL)[NSThread isMainThread]

ब्रेकपॉइंट 3:

  • प्रतीक: -[UIView updateConstraintsIfNeeded]

  • स्थिति: !(BOOL)[NSThread isMainThread]

इन ब्रेकप्वाइंट के साथ, आप आसानी से वास्तविक लाइन पर ब्रेक प्राप्त कर सकते हैं जहां आप गलत तरीके से यूआई तरीकों को गैर-मुख्य थ्रेड पर कॉल करते हैं।


4

UITableView में डेटा पुनः लोड करते समय मेरे पास यह समस्या थी। बस पुनः लोडिंग भेजना इस प्रकार है कि मेरे लिए समस्या तय हो जाए।

    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.tableView.reloadData()
    })

यह मेरे लिए था! मुख्य कतार पर मेरे पास सब कुछ था लेकिन एक आवारा पुनः लोडडाटा ()!
ओप्रिमस

3

मुझे भी यही समस्या थी। मुझे पता है UIAlertsकि मैं मुख्य कतार की जरूरत का उपयोग कर रहा था । लेकिन, उन्हें पदावनत कर दिया गया है ।
जब मैं बदल UIAlertsकरने के लिए UIAlertController, मैं अब समस्या थी और किसी भी उपयोग करने के लिए नहीं था dispatch_asyncकोड। सबक - चेतावनी पर ध्यान दें। जब आप इसकी उम्मीद नहीं करते तब भी वे मदद करते हैं।


3

आपके पास @Mark से पहले से ही सही कोड का उत्तर है, लेकिन मेरे निष्कर्षों को साझा करने के लिए: मुद्दा यह है कि आप दृश्य में बदलाव का अनुरोध कर रहे हैं और यह मानकर चल रहे हैं कि यह तुरंत होगा। वास्तव में, एक दृश्य का लोडिंग उपलब्ध संसाधनों पर निर्भर करता है। यदि सब कुछ जल्दी से पर्याप्त लोड होता है और कोई देरी नहीं होती है तो आप कुछ भी नोटिस नहीं करते हैं। परिदृश्यों में, जहाँ प्रक्रिया थ्रेड व्यस्त होने के कारण कोई विलंब होता है, एप्लिकेशन ऐसी स्थिति में चलता है, जहाँ इसे अभी तक तैयार नहीं होने के बावजूद कुछ प्रदर्शित करना है। इसलिए, इन अनुरोधों को अतुल्यकालिक कतारों में भेजना उचित है, इसलिए वे लोड के आधार पर निष्पादित होते हैं।


2

मेरे पास यह मुद्दा था जब मैं टचआईडी का उपयोग कर रहा था यदि वह किसी और की मदद करता है, तो अपनी सफलता के तर्क को लपेटें जो संभवतः मुख्य कतार में यूआई के साथ कुछ करता है।


2

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

इस लिंक की जाँच करें: https://forums.developer.apple.com/thread/7399


2

जब एक ही ViewController में UILabel में त्रुटि संदेश को अपडेट करने की कोशिश कर रहा था तो मेरे पास एक ही मुद्दा था (सामान्य कोडिंग के साथ ऐसा करने की कोशिश करने पर डेटा को अपडेट करने में थोड़ा समय लगता है)। मैंने DispatchQueueस्विफ्ट 3 एक्सकोड 8 में इस्तेमाल किया और यह काम करता है।


2

यदि आप इस त्रुटि का शिकार करना चाहते हैं, तो चेकबॉक्स पर मुख्य थ्रेड चेकर पॉज़ का उपयोग करें। इसे ठीक करना सबसे अधिक आसान है, मुख्य कतार में समस्याग्रस्त रेखा को भेजना।

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


1
यह वास्तव में क्या करता है? "मेन थ्रेड चेकर" को डिफ़ॉल्ट रूप से सक्षम किया गया था और मैंने दोनों के लिए "थ्रेड सैनिटाइज़र" और "मुद्दों पर विराम" की जाँच की, लेकिन यह अभी भी केवल "बैकग्राउंड थ्रेड से संशोधित" संदेश को बिना किसी और जानकारी को जोड़े फेंकता है।
नेफा

यह उस बिंदु पर ऐप के निष्पादन को रोक देता है जहां UI को पृष्ठभूमि थ्रेड में संशोधित किया जा रहा है।
रॉकडस्विफ्ट

अजीब, यह मेरे app (Xcode 10.2.1) में ऐसा नहीं किया। मुझे विराम देने के लिए मैन्युअल रूप से ब्रेकपॉइंट्स ( यहाँ वर्णित के रूप में ) जोड़ना था और कोड की लाइन पर मुझे इंगित करना था।
नेफा

और मैं विकल्पों के इस सेट को देखने के लिए क्या करूं?
डेविड रेक्टर

अपने लक्ष्य की योजना संपादित करें
रॉकडासविफ्ट

1

मेरे लिए मुद्दा निम्नलिखित था। सुनिश्चित करें कि performSegueWithIdentifier:मुख्य धागे पर प्रदर्शन किया गया है:

dispatch_async (dispatch_get_main_queue(), ^{
  [self performSegueWithIdentifier:@"ViewController" sender:nil];
});

1

स्विफ्ट 4,

मान लीजिए, यदि आप ऑपरेशन कतार का उपयोग करके किसी विधि को बुला रहे हैं

operationQueue.addOperation({
            self.searchFavourites()
        })

और मान लीजिए कि फंक्शन सर्चफोराइट्स की तरह है,

func searchFavourites() {
     DispatchQueue.main.async {
                    //Your code
                }
}

यदि आप कॉल करते हैं, तो मुख्य थ्रेड पर "searchFavourites" विधि के अंदर सभी कोड, यह तब भी एक त्रुटि देगा यदि आप इसमें कुछ UI अपडेट कर रहे हैं।

यह एप्लिकेशन मुख्य थ्रेड से इंजन तक पहुंचने के बाद एक पृष्ठभूमि थ्रेड से ऑटोलेयूट इंजन को संशोधित कर रहा है।

तो समाधान का उपयोग करें,

operationQueue.addOperation({
            DispatchQueue.main.async {
                self.searchFavourites()
            }
        })

इस तरह के परिदृश्य के लिए।


1

यहाँ लॉग से इस लाइन की जाँच करें

$S12AppName18ViewControllerC11Func()ySS_S2StF + 4420

आप देख सकते हैं कि कौन सा फ़ंक्शन या तो बैकग्राउंड थ्रेड से कॉल कर रहा है या जहाँ आप एपि विधि कह रहे हैं, आपको अपने फंक्शन को इस तरह से मुख्य थ्रेड से कॉल करने की आवश्यकता है।

DispatchQueue.main.async { func()}

func () वह फ़ंक्शन है जिसे आप एपी कॉल सफलता के परिणाम में कॉल करना चाहते हैं या फिर।

यहाँ लॉग करता है

This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
 Stack:(
    0   Foundation                          0x00000001c570ce50 <redacted> + 96
    1   Foundation                          0x00000001c5501868 <redacted> + 32
    2   Foundation                          0x00000001c5544370 <redacted> + 540
    3   Foundation                          0x00000001c5543840 <redacted> + 396
    4   Foundation                          0x00000001c554358c <redacted> + 272
    5   Foundation                          0x00000001c5542e10 <redacted> + 264
    6   UIKitCore                           0x00000001f20d62e4 <redacted> + 488
    7   UIKitCore                           0x00000001f20d67b0 <redacted> + 36
    8   UIKitCore                           0x00000001f20d6eb0 <redacted> + 84
    9   Foundation                          0x00000001c571d124 <redacted> + 76
    10  Foundation                          0x00000001c54ff30c <redacted> + 108
    11  Foundation                          0x00000001c54fe304 <redacted> + 328
    12  UIKitCore                           0x00000001f151dc0c <redacted> + 156
    13  UIKitCore                           0x00000001f151e0c0 <redacted> + 152
    14  UIKitCore                           0x00000001f1514834 <redacted> + 868
    15  UIKitCore                           0x00000001f1518760 <redacted> + 104
    16  UIKitCore                           0x00000001f1543370 <redacted> + 1772
    17  UIKitCore                           0x00000001f1546598 <redacted> + 120
    18  UIKitCore                           0x00000001f14fc850 <redacted> + 1452
    19  UIKitCore                           0x00000001f168f318 <redacted> + 196
    20  UIKitCore                           0x00000001f168d330 <redacted> + 144
    21  AppName                        0x0000000100b8ed00 $S12AppName18ViewControllerC11Func()ySS_S2StF + 4420
    22  AppName                        0x0000000100b8d9f4 $S12CcfU0_y10Foundation4DataVSg_So13NSURLResponseCSgs5Error_pSgtcfU_ + 2384
    23  App NAme                        0x0000000100a98f3c $S10Foundation4DataVSgSo13NSURLResponseCSgs5Error_pSgIegggg_So6NSDataCSgAGSo7NSErrorCSgIeyByyy_TR + 316
    24  CFNetwork                           0x00000001c513aa00 <redacted> + 32
    25  CFNetwork                           0x00000001c514f1a0 <redacted> + 176
    26  Foundation                          0x00000001c55ed8bc <redacted> + 16
    27  Foundation                          0x00000001c54f5ab8 <redacted> + 72
    28  Foundation                          0x00000001c54f4f8c <redacted> + 740
    29  Foundation                          0x00000001c55ef790 <redacted> + 272
    30  libdispatch.dylib                   0x000000010286f824 _dispatch_call_block_and_release + 24
    31  libdispatch.dylib                   0x0000000102870dc8 _dispatch_client_callout + 16
    32  libdispatch.dylib                   0x00000001028741c4 _dispatch_continuation_pop + 528
    33  libdispatch.dylib                   0x0000000102873604 _dispatch_async_redirect_invoke + 632
    34  libdispatch.dylib                   0x00000001028821dc _dispatch_root_queue_drain + 376
    35  libdispatch.dylib                   0x0000000102882bc8 _dispatch_worker_thread2 + 156
    36  libsystem_pthread.dylib             0x00000001c477917c _pthread_wqthread + 472
    37  libsystem_pthread.dylib             0x00000001c477bcec start_wqthread + 4
)

0

मुझे इस समस्या का भी सामना करना पड़ा, इन संदेशों के एक टन और आउटपुट में प्रिंट किए गए स्टैक के निशान देखकर, जब मैंने खिड़की को अपने प्रारंभिक मूल्य से छोटे आकार में आकार दिया। समस्या का पता लगाने के लिए एक लंबा समय बिताते हुए, मैंने सोचा कि मैं बल्कि सरल समाधान साझा करूंगा। मैंने एक बार आईबी के माध्यम से सक्षम Can Draw Concurrentlyकिया था NSTextView। यह AppKit को बताता है कि यह draw(_:)किसी अन्य थ्रेड से दृश्य की विधि को कॉल कर सकता है । इसे अक्षम करने के बाद, मुझे अब कोई त्रुटि संदेश नहीं मिला। मुझे macOS 10.14 बीटा में अद्यतन करने से पहले किसी भी समस्या का अनुभव नहीं हुआ, लेकिन साथ ही, मैंने पाठ दृश्य के साथ काम करने के लिए कोड को संशोधित करना भी शुरू कर दिया।

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