@IBDesignable एरर: आईबी डिज़ाइबल्स: ऑटो लेआउट स्टेटस अपडेट करने में विफल: इंटरफ़ेस बिल्डर कोको टच टूल क्रैश हो गया


157

मेरे पास UITextView का एक बहुत ही सरल उपवर्ग है जो "प्लेसहोल्डर" कार्यक्षमता को जोड़ता है जिसे आप टेक्स्ट फील्ड ऑब्जेक्ट के मूल में पा सकते हैं। यहाँ उपवर्ग के लिए मेरा कोड है:

import UIKit
import Foundation

@IBDesignable class PlaceholderTextView: UITextView, UITextViewDelegate
{
    @IBInspectable var placeholder: String = "" {
        didSet {
            setPlaceholderText()
        }
    }
    private let placeholderColor: UIColor = UIColor.lightGrayColor()        
    private var textColorCache: UIColor!
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.delegate = self
    }
    
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.delegate = self
    }
    
    func textViewDidBeginEditing(textView: UITextView) {
        if textView.text == placeholder {
            textView.text = ""
            textView.textColor = textColorCache
        }
    }
    
    func textViewDidEndEditing(textView: UITextView) {
        if textView.text == "" && placeholder != "" {
            setPlaceholderText()
        }
    }
    
    func setPlaceholderText() {
        if placeholder != "" {
            if textColorCache == nil { textColorCache = self.textColor }
            self.textColor = placeholderColor
            self.text = placeholder
        }
    }
}

UITextViewपहचान इंस्पेक्टर में ऑब्जेक्ट के लिए क्लास बदलने के बाद PlaceholderTextView, मैं नंबर सेट कर सकता हूंPlaceholder गुण निरीक्षक में ठीक प्रॉपर्टी । एप्लिकेशन चलाते समय कोड बहुत काम करता है, लेकिन इंटरफ़ेस बिल्डर में प्लेसहोल्डर टेक्स्ट प्रदर्शित नहीं करता है। मुझे निम्नलिखित गैर-अवरोधक त्रुटियां भी मिलती हैं (मुझे लगता है यही कारण है कि यह डिज़ाइन समय पर प्रदान नहीं कर रहा है):

एरर: आईबी डिज़ाइबल्स: ऑटो लेआउट स्टेटस अपडेट करने में विफल: इंटरफ़ेस बिल्डर कोको टच टूल क्रैश हो गया

त्रुटि: आईबी डिज़ाइबल्स: प्लेसहोल्डरटेक्स्ट व्यू का उदाहरण प्रस्तुत करने में विफल: दृश्य को रेंडर करने में 200 एमएस से अधिक समय लगा। आपका ड्राइंग कोड धीमे प्रदर्शन से पीड़ित हो सकता है।

मैं यह पता लगाने में सक्षम नहीं हूं कि इन त्रुटियों का कारण क्या है। दूसरी त्रुटि का कोई मतलब नहीं है, क्योंकि मैं ड्रॉअर ओवरराइड () भी नहीं कर रहा हूं। कोई विचार?


1
मुझे यह त्रुटि मिल रही थी। ऑब्जेक्ट ने एक परीक्षण परियोजना में ठीक काम किया, लेकिन मेरे मुख्य प्रोजेक्ट में नहीं (एक तालिका में)। डेवलपर .apple.com/library/mac/recipes/… के अनुसार , मैंने चुन लिया संपादक> डिबग चयनित दृश्य। तब मुझे "विचारों को डिबग नहीं कर सका" "सुनिश्चित करें कि आपके ढांचे में आईओएस के निर्माण के लिए सही बिल्ड सेटिंग्स हैं।" इस त्रुटि के लिए Google में कुछ भी नहीं आया।
मैट

जवाबों:


238

इंटरफ़ेस बिल्डर कोको टच टूल क्रैश होने पर क्रैश रिपोर्ट उत्पन्न होती हैं। Theses स्थित हैं ~/Library/Logs/DiagnosticReportsऔर नामित हैं IBDesignablesAgentCocoaTouch_*.crash। मेरे मामले में उनके पास एक उपयोगी स्टैक-ट्रेस था जिसने मेरे कोड में समस्या की पहचान की।


1
धन्यवाद! यह सुपर सहायक था! आपको क्रैश रिपोर्ट के बारे में जानकारी कहां से मिली? :)
बेन-जी

57
मेरे मामले में, मैंने पाया कि initFrame(frame: CGRect)परिभाषित किया जाना चाहिए। यदि आप अपना स्वयं का initतरीका प्रदान करते हैं तो ऐसा करें ।
ट्रैविस

यह सबसे अच्छा उपाय था। मैं एक दृश्य पर initWithFrame लागू नहीं कर रहा था।
HotFudgeSunday

3
मैंने नैदानिक ​​रिपोर्टों का उपयोग किया और @Travis का उल्लेख किया, जैसे मुझे init(frame: CGRect)स्पष्ट रूप से ओवरराइड करने की आवश्यकता थी क्योंकि मेरे पास एक कस्टम iniतरीका था। आप use of unimplemented initializer 'init(frame:)'सीधे रिपोर्ट में क्रैश रिपोर्ट के माध्यम से देखना चाह सकते हैं Application Specific Information। धन्यवाद दोस्तों! इस जवाब में दोहरी जीत!
क्रिस

4
हमेशा की तरह, यह लॉग फ़ाइल उपयोगकर्ता निदान रिपोर्ट समूह के तहत कंसोल मैकओएस ऐप में भी उपलब्ध है ।
पाउलो मैटोस

51

मैं एक ही मुद्दे पर दो बार किया है। दोनों बार यह तब शुरू हुआ जब मैं स्टोरीबोर्ड पर एक IBDesignable nib लोड कर रहा था जब nib दृश्य पर फिट नहीं हो पा रहा था (यानी मेरे पास UIView का बटन बंद था लेकिन अभी भी nib में)। एक बार जब मैंने तय कर लिया कि Xcode ने अभी भी मुझे त्रुटियाँ दी हैं, तो मैंने Xcode को तब तक फिर से शुरू किया जब तक कि उसने मुझे त्रुटि देना बंद नहीं कर दिया।

आशा है कि ये आपकी मदद करेगा।

अद्यतन: मैंने "इंटरफ़ेस बिल्डर कोको टच टूल" नाम की सभी प्रक्रियाओं को मार डाला, Xcode को पुनरारंभ किया और त्रुटि दूर हो गई। पता नहीं यह हमेशा काम करेगा या नहीं।


2
हालांकि मुझे अभी भी समझ में नहीं आया है, यदि आप किसी भी initतरीके को अधिलेखित नहीं करते हैं , तो प्रश्न के भाग के रूप में पोस्ट किया गया कोड अब IB Designablesत्रुटियों को नहीं दिखाता है और इंटरफ़ेस बिल्डर में प्लेसहोल्डर को ठीक से प्रस्तुत किया गया है।
विलिंगटन वेगा

2
शायद यह एक बग है और हमें इसे ठीक करने के लिए इंतजार करने की जरूरत है। शायद Xcode 6.3 में।
यूसुफ मोवद

3
XCode 7.1.1 और अभी भी मौजूद है। XCode को पुनरारंभ करने से समस्या हल नहीं हुई। मुझे इंटरफ़ेस बिल्डर कोको टच टूल नामक सभी प्रक्रियाओं को मैन्युअल रूप से मारना था, फिर एक्सकोड दुर्घटनाग्रस्त हो गया, इसे फिर से शुरू किया और यह काम करना शुरू कर दिया।
क्रिस्टियन पेना

1
महत्वपूर्ण बिंदु: वास्तव में FIRST इंटरफ़ेस बिल्डर प्रक्रियाओं को मारते हैं, फिर XCode को रोकें - यदि आप इसे करते हैं तो समस्या के आसपास दूसरा रास्ता बना रहता है ...
TheEye

2
XCode 8.1 यह त्रुटि अभी भी होती है। मूल रूप से init ओवरराइड नहीं होने के कारण होता है, लेकिन init जुड़ने के बाद कायम रहता है। इंटरफ़ेस बिल्डर प्रक्रियाओं को मारने के लिए जैसा कि वर्णित किया गया था Xcode @ @ के रूप में पुनः आरंभ करें
जॉन फाउलर

39

मेरे मामले में, मैं दृश्य बनाने के लिए initWithFrame / initWithCoder तरीकों में अगला काम कर रहा था:

className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];

ऐसा लगता है कि मैं मेन बंडल का उपयोग करने वाला नहीं था , बल्कि क्लास के बंडल का उपयोग करने वाला था । इसलिए मैंने निम्नलिखित के लिए उस कोड को बदल दिया और यह काम कर गया:

bundle = [NSBundle bundleForClass:[self class]];
className = NSStringFromClass([self class]);
self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];

मैंने सोचा कि शायद यह किसी की मदद कर सकता है।


1
इससे मेरा मुद्दा भी ठीक हो गया! धन्यवाद @jmoukel!
edopelawi

उस एक ने मेरी बात तय कर दी। आदमी!!! मैं नोटिस नहीं कर सका कि "बंडललेयरक्लास" लाइन भले ही मैंने इस समाधान जोड़ी में देखी हो। :(
एल्क_क्लोनर

let bundle = Bundle(for: ValidatingTextField.self)स्विफ्ट में
Cfr

14

आप इंटरफ़ेस बिल्डर और फिर उपयोग में अपने कस्टम दृश्य का चयन कर सकता है Editor, Debug Selected Views। यह तथाकथित IBDesignableAgentCocoaTouchडिबग सत्र लॉन्च करेगा जब सभी ब्रेकप्वाइंट (अपवाद ब्रेकपॉइंट सहित) काम करते हैं और आप उस स्थान की पहचान कर सकते हैं जो आपके दृश्य क्रैश करता है।


उत्तम! यह मेरी समस्या है, भी - एक गलत फ़ॉन्ट। जो बताता है कि क्यों केवल छह समान समान IBDesignables विफल हो रहे थे।
जकरज z ’at१ at को ०kar:

13

के लिए स्विफ्ट - Xcode 8

@IBInspectableमेरे लिए समस्या पैदा करने पर डिफ़ॉल्ट मान के रूप में वैकल्पिक मूल्य जोड़ना ।

यह काम नहीं करेगा:

@IBInspectable var repeatImage: UIImage = UIImage(named:"myImage")!{
      didSet {
       // configureView
      }
}

यह काम करना चाहिए:

@IBInspectable var repeatImage: UIImage = RepeatImageView.getDefaultImage() {
    didSet {
        // configureView()
    }
}

class func getDefaultImage() -> UIImage {
    if let defaultImage = UIImage(named: "myImage") {
        return defaultImage
    } else {
        return UIImage()
    }
}

@DungTran आप किस मुद्दे का सामना कर रहे हैं?
मोहम्मद जैद पठान

1
वैकल्पिक हैंडलिंग दुर्घटना को रोकता है। लेकिन क्या आप जानते हैं कि UIImage (नाम :) को लगातार वापस करने के लिए क्या कारण है?
स्कॉट्टीब्लाड्स

इस कोड को टिप्पणी करते हुए मेरे लिए यह निर्धारित किया गया है `@objc @available (*, पदावनत, नाम बदला:" backgroundColor ") @IBInspectable public var signatureBackgroundColor: UIColor = .white (doSet {backgroundColor = signatureBackgroundColor}}`
PhoneyDeveloper

9

मैं इसी तरह के इंटरफ़ेस बिल्डर के मुद्दों का अनुभव कर रहा था, जो कि डिजाइनिंग प्रदान करता है।

इस उत्तर में सुझाई गई तकनीक का उपयोग करके मैं छवि शाब्दिकों के उपयोग के मुद्दे को ट्रैक करने में सक्षम था।

रेंडरिंग क्रैश

self.backgroundImage.image =  #imageLiteral(resourceName: "rectangleCenter")

कोई प्रतिपादन दुर्घटना नहीं

self.backgroundImage.image =  UIImage(named: "rectangleCenter")

आप एक नायक हो।
नाथंगितर

किसी भी विचार क्यों छवि शाब्दिक आईबी के साथ असंगत हैं? मेरी भी यही समस्या थी।
स्विफ्टनामेस

6

वास्तव में यदि आपके पास अपने स्टोरीबोर्ड में किसी भी दृश्य में कुछ पुराने उपयोगकर्ता परिभाषित गुण (जो वर्तमान दृश्य के लिए मान्य नहीं हैं), जो आपके एजेंट के दुर्घटनाग्रस्त होने का कारण हो सकता है।

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

अगर दोनों काम नहीं करते हैं, तो शायद आपने अपने IBDesignable view के बारे में कुछ गलत किया है, इसलिए स्टोरीबोर्ड और डीबग में अपने क्रैश किए गए दृश्यों को संपादक> डीबग व्यू पर क्लिक करके चुनें


आप भगवान की ओर से एक उपहार हैं।
andrewcar

4

यह इस प्रश्न के लिए मामला नहीं है, लेकिन शायद मैं किसी और की मदद करूंगा।

जब मेरे @IBDesignable क्लास में मैंने दोनों को लागू नहीं किया तो मुझे एक समान समस्या थी:

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    // custom setup
}

override init(frame: CGRect) {
    super.init(frame: frame)

    // custom setup
}

आपको हमेशा दोनों init के तरीकों को लागू करना चाहिए। फ़्रेम के साथ init का उपयोग तब किया जाता है जब आप कोड से अपना दृश्य init करते हैं और इंटरफ़ेसकोड के साथ aDecoder के साथ init का उपयोग किया जाता है।
Skodik.o

4

मेरे पास एक ही मुद्दा था और मैंने इसे 'use_frameworks!' जोड़कर हल किया। मेरे प्रोजेक्ट के पोडफाइल को।

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


यह मेरे लिए तब काम आया जब मेरे पास JVFloatLabeledTextField
saswanb

यह मेरे लिए काम कर रहा था, एक पुरानी ओज-सी परियोजना को अपना रहा था जो काफी पुराना था। आईबी इसके बाद क्रिसमस ट्री की तरह चमकती है! धन्यवाद।
आकर्षित किया ..

3

मेरे मामले में यह किसी तरह एक कार्टेज फ्रेमवर्क से संबंधित था जिसका मैं उपयोग कर रहा था। मुझे सेटिंग बनाने के लिए $ (PROJECT_DIR) / कार्थेज / बिल्ड / iOS को रनपथ सर्च पाथ में जोड़ना पड़ा


अन्य सभी पोस्ट किए गए समाधानों की कोशिश करने के बाद ... यह एकमात्र फिक्स था जो मेरे लिए काम करता था! धन्यवाद!
जोएल

3

मेरे मामले में, यह OneSignal के साथ एक समस्या थी। जाहिरा तौर पर, वे 2.2.0 और इसके बाद के संस्करण के भीतर एक बग है। 2.1.6 पर स्विच किया गया और सब कुछ फिर से शानदार हो गया!

की जाँच करें इस


1

जब मैंने इसे डीबग किया तो मुझे पता चला कि कुछ वर्ग हैं जो UI को संशोधित कर रहे हैं। आमतौर पर marquelabel जो UILabel या किसी अन्य वर्ग का उपवर्ग है जो UIView को उपवर्गित करता है और रन समय में ui को खींचता है और Autolayout इंजन से टकराता है। इन कस्टम दृश्यों के लिए निश्चित चौड़ाई या ऊँचाई देने का प्रयास करें। यदि यह आपकी समस्या का समाधान नहीं करता है, तो निम्न समाधान आज़माएं: -

समाधान 1: - अपनी पॉड फ़ाइल के अंदर Unusement #use_frameworks।

समाधान 2: - व्युत्पन्न डेटा को हटाने का प्रयास करें। 1. अपने Xcode के संपादक विंडो को बंद करें और सिम्युलेटर छोड़ दें -> 2. Xcode प्राथमिकताएं पर जाएं -> स्थान -> 3. व्युत्पन्न डेटा पथ दिखाने वाले छोटे ग्रे तीर पर क्लिक करें -> 4. अपने प्रोजेक्ट का चयन करें -> 5. अंदर सभी फ़ोल्डर्स को हटाएं -> 6. Xcode से बाहर निकलें और फिर से खोलें


1

इसे अपने पोडफाइल के निचले हिस्से में जोड़ें और चलाएं pod install

# Workaround for Cocoapods issue #7606

    post_install do |installer|
        installer.pods_project.build_configurations.each do |config|
            config.build_settings.delete('CODE_SIGNING_ALLOWED')
            config.build_settings.delete('CODE_SIGNING_REQUIRED')
        end
    end

1

इस स्क्रिप्ट को मेरे अंत में जोड़ें Podfileऔर pod installफिर से प्रदर्शन करें।

post_install do |installer|
    installer.pods_project.build_configurations.each do |config|
        config.build_settings.delete('CODE_SIGNING_ALLOWED')
        config.build_settings.delete('CODE_SIGNING_REQUIRED')
    end
end

1

एक प्रमुख मुद्दा यह है कि जब आप @ IBDesignable बना रहे हैं तो सुनिश्चित करें कि कोकोपॉड फ़ाइल UITests में शामिल नहीं है या फिर यह दुर्घटना का कारण बनेगी।


0

मुझे लगता है कि कारण यह है कि आपका xib स्टोरीबोर्ड में डिज़ाइन के समान नहीं है। सुनिश्चित करें कि xib की ऊंचाई और चौड़ाई समान है।


0

मुझे कोड की यह लाइन याद आ रही थी platform :ios, '7.0' और समस्या हल हो गई थी। बस आपकी पॉड फ़ाइल में यह लाइन और आपके पॉड इश्यू को अपडेट करने से हल हो जाएगी।


0

मेरे लिए यह एक लापता हस्ताक्षर प्रमाणपत्र था, क्योंकि मैंने कभी ऐप नहीं चलाया था, इसलिए Xcode ने अभी तक प्रमाणपत्र नहीं बनाया है। एक बार जब मैंने ऐप चलाया, तो IBDesignableरेंडरिंग ने ठीक काम किया।


0

यह ऐसा है जैसे यदि आपको अन्य डेवलपर से कोड मिला है और आपको यह त्रुटि मिली है। बस दौडो

pod install

इसने मेरे लिए काम किया। आशा करता हूँ की ये काम करेगा।


0

सुनिश्चित करें कि आप सीधे शुरू नहीं कर रहे हैं UIImageयाUIFont अपने प्रोजेक्ट में जोड़े गए एसेट्स या फोंट को उपयोग ।

मैं हमेशा private func setUp()अपनी @IBDesignableकस्टम UIकक्षाओं में एक बनाता हूं । जिसमें से कहा जाता है init(frame: CGRect), init?(coder aDecoder: NSCoder)। इसलिए मैंने अंत setup()में निम्नलिखित के रूप में अपडेट किया ।

private func setUp() {

     //... Doing initial configurations

     // iconImageView.image = UIImage(named: "IconImageName")! // Causing the Crash, use if let OR guard let instead
     if let icon = UIImage(named: "IconImageName") {
          iconImageView.image = icon
          iconImageView.frame.size = icon.size
     }

     // nameLabel.font =  UIFont(name: "Calibri-Light", size: 15.0) // Causing the Crash, use if let OR guard let instead
     if let font = UIFont(name: "Calibri-Light", size: size) {
          nameLabel.font =  font
     } else {
          nameLabel.font = UIFont.systemFont(ofSize: size) 
     }

     // Doing other stuffs
}

-1

बस इसे सिम्युलेटर पर बनाने और चलाने के लिए दें यदि आपके पास प्रोजेक्ट में कहीं और त्रुटि है तो बस इसे टिप्पणी दें और डिज़ाइन करने योग्य को अपडेट करने के लिए पहले रन करें और अन्य कोड्स को अनकम्प्लीट करें। इससे मेरा काम बनता है।

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