Xcode 8 - IB Designables - ऑटो लेआउट की स्थिति को प्रस्तुत करने और अद्यतन करने में विफल, एजेंट दुर्घटनाग्रस्त हो गया


167

मैंने हाल ही में Xcode 8 में अपग्रेड किया है और मैं स्टोरीबोर्ड के साथ समस्या कर रहा हूं।

अगर मैं प्रोजेक्ट खोलता हूं और मेरे पास स्टोरीबोर्ड ओपन नहीं है, तो यह संकलन और ठीक चलेगा। एक बार जब मैं स्टोरीबोर्ड खोलता हूं, तो मुझे नीचे दिए गए अनुसार IB Designables के बारे में कई त्रुटियां मिलती हैं।

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

ये विचार केवल वही विचार हैं जो कस्टम दृश्य का उपयोग कर रहे हैं TextFieldEffectsऔर BEMCheckboxजो मैंने कोकोपोड्स का उपयोग करके आयात किया है।


हो सकता है कि आपके द्वारा उपयोग किए जा रहे पोड के लिए भंडार की जाँच करें और देखें कि क्या यह समस्या अन्य उपयोगकर्ताओं के बीच प्रचलित है?
ज़ोलनूर

इसका कोई प्रासंगिक उत्तर?
मोहसिन ख़ुबीब अहमद

1
क्या तुम लोगों को कोई हल मिला?
डुबकी

बाहर देखो, समस्या तुम एक एम्बेडेड पुस्तकालय के लिए एक बच्चा बनाया जा सकता है । मेरे उदाहरण में मैंने स्विफ्ट को एम्बेड किया था। स्वाभाविक रूप से आप हाथ में वसा का निर्माण (विकास के लिए - सिम्युलेटर / फोन) और फोन-ओनली बिल्ड (ऐप स्टोर, केवल फोन के लिए) पर रहते हैं और आप केवल तभी फोन को स्वैप करते हैं, जब टेस्टफ्लाइट आदि को जमा करने की आवश्यकता होती है। परियोजना में फोन केवल पुस्तकालय था !!!!! रवींद्र! निश्चित समस्या पर "सही" वसा के लिए स्वैपिंग।
फेटी

जवाबों:


179

कारण जानने के लिए आप निम्नलिखित में से एक को आजमा सकते हैं:

  1. देखने के IBDesignablesAgentCocoaTouchइस निर्देशिका में लॉग: ~/Library/Logs/DiagnosticReportsऔर कारण देखते हैं।

नोट: कैटालिना के साथ उपयोगकर्ता के लिए: देखें IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash

  1. @IBDesignable UIViewअपने स्टोरीबोर्ड में अपना चयन करते समय संपादक -> डिबग चयनित दृश्य पर जाएं , और स्टैक ट्रेस देखें।

  2. डिलीट डाटा फोल्डर को डिलीट करें।

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
    
  3. अपना प्रोजेक्ट Shift + Command + Alt + साफ़ करें K

  4. अपने प्रोजेक्ट Command + का निर्माण करें B


35
इस दृष्टिकोण का उपयोग करके मैं यह पता लगा पा रहा था कि इसका कारण क्या था Fatal error: Use of unimplemented initializer 'init(frame:)' for class 'TestIBKit.Button'। मुझे लगता है कि पता नहीं था IBDesignablesAgentCocoaTouchप्रक्रिया कॉल init(frame:), के बजाय init?(coder aDecoder:)
येविन दुबिनिन

5
@YevhenDubinin धन्यवाद, इससे मुझे मदद मिली। init(frame:)मेरे UIButton उपवर्ग
डोरेमोन

2
इससे मेरा मुद्दा ठीक हो गया, लेकिन मुझे व्युत्पन्न डेटा को हटाने से पहले xCode को छोड़ना पड़ा
हुसम

2
सबसे अच्छा उत्तर init (फ्रेम :) आम मुद्दा है
Michał Ziobro

1
Xcode से बाहर निकलें और DerivedData को साफ़ करें। इसने समस्या हल कर दी।
मुबाशर

80

मैंने निम्न कार्य करके समस्या हल की:

  1. के पास जाओ File > Workspace settings
  2. "व्युत्पन्न डेटा" के पास थोड़ा दायां तीर क्लिक करें। यह DerivedDataफ़ोल्डर के स्थान पर फाइंडर ऐप को खोलता है ।
  3. DerivedDataफ़ोल्डर के अंदर जाएं , और अपनी परियोजना के अनुरूप फ़ोल्डर को हटा दें।
  4. Xcode से बाहर निकलें, और इसे फिर से खोलें।
  5. अपने प्रोजेक्ट को साफ करें shiftcommandk
  6. अपने प्रोजेक्ट का निर्माण करें commandb
  7. अपना स्टोरीबोर्ड खोलें।
  8. के पास जाओ Editor > Refresh all views

अपडेट किया गया

कभी-कभी बस सीधे Editor > Refresh all viewsकाम पर जाएं । यदि Refresh all viewsअक्षम है, तो Xcode छोड़ दें और फिर से प्रयास करें।


इसे पोस्ट करने के लिए आपका धन्यवाद। मैंने व्युत्पन्न डेटा का "पुराना स्कूल" कमांड लाइन हटाने का काम किया, लेकिन समस्या बनी रही। अपनी विधि का उपयोग करके मेरे लिए समस्या का समाधान किया।
एड्रियन

मेरे लिए भी जीत के लिए सभी विचारों को ताज़ा करें। धन्यवाद!
माइक के।

56

मैं बस उस दृश्य को हटा देता हूं जो विफल है और पूर्व + विलोपन के लिए कमांड + Z दबाएं। इससे मेरा काम बनता है।

यदि बाद में विफल दृश्य का संपादन किया जाता है, तो त्रुटि फिर से हो सकती है, ऊपर फिर से करें।


6
इसकी हास्यास्पद लेकिन यह काम किया।
अंसारी

1
बहुत बढ़िया!! मेरे लिए काम किया
नूपुर शर्मा

1
कौन जानता है कि यह जवाब हो सकता है। यह काम किया मुझे अभी भी विश्वास नहीं हो रहा है
असद अमोड़ी

37

मुझे इस मुद्दे का सामना CocoaPod 1.5.0 में करना पड़ा। समाधान फिर से पॉड को फिर से स्थापित करने के लिए है (एक बार फिर से पॉड इंस्टॉल) यह दिखाने में त्रुटि या आप इसके बजाय CocoaPod 1.4.0 का उपयोग कर सकते हैं। यह 1.4.0 में ठीक काम करता है (कम से कम मेरे लिए।)

अपडेट करें:

पॉडफाइल में निम्नलिखित स्क्रिप्ट जोड़ें मुझे 1.5.0 में समस्या को हल करने में मदद करें

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

संदर्भ: https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911


100% सच है। डाउनग्रेड करने के लिए 1.4.0 ने मेरे लिए समस्या का समाधान किया।
ale_stro

4
काम किया, 1.5.0 फली।
एंड्री ओशेव

3
यह s work for me, you should add कोड के अंतिम तक `समाप्त होता है।
मेहदी

1
मेरे लिए भी काम किया। अन्य सभी सुझावों को कोई सफलता नहीं मिली। पोड्स 1.3.1 के साथ परीक्षण किया गया
सैल

18

मेरी @IBDesignableकक्षा में निम्नलिखित कोड जोड़कर चाल चली गई।

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

यह मेरे लिए काम करता है। वास्तव में, मैंने विस्तार के लिए दो ओवरराइड जोड़े UITextView। (1) init(frame: CGRect, textContainer: NSTextContainer?), (2) init?(coder aDecoder: NSCoder)। फिर पुनर्निर्माण और चेतावनी (त्रुटि) गई। बिल्ड फ़ोल्डर को साफ करने की भी आवश्यकता नहीं है।
जॉन पैंग

धन्यवाद! अच्छा जवाब)
JiosDev

13

मेरे जैसे किसी के लिए- जो उस IBDesignablesAgentCocoaTouchफ़ाइल को नहीं खोज सकता या जब संपादक से 'डीबग सेलेक्टेड व्यूज' की कोशिश करता है, तो एक त्रुटि मिलती है, यहाँ एक और तरीका है उन "डीबग्ड टू रेंडर" त्रुटियों को।

'कंसोल' ऐप खोलें, साइडबार से अपना वर्तमान मैक चुनें (यह संभवतः डिफ़ॉल्ट रूप से ऑटो-चयनित होगा) और फिर "IBSceneUpdate" के लिए खोज बार खोज पर और हिट दर्ज करें।

इस तरह, हर बार जब आप एक एक्सकोड त्रुटि प्राप्त IBDesignableकरने में सक्षम नहीं होते हैं, तो आपको त्रुटि के बारे में अधिक विवरण के साथ एक नई "IBSceneUpdate" प्रविष्टि भी मिलेगी।

यह कम से कम कैसे मैं अपनी IBDesignableत्रुटियों को डीबग करने में सक्षम था !

IBSceneUpdate त्रुटियाँ दिखाने वाला कंसोल ऐप


1
ऐप केवल FYI के रूप में टर्मिनल के बजाय वास्तविक कंसोल है।
कार्ल अप्टन

अच्छी पकड़! मेरे उत्तर का संपादन किया।
स्टेलैबोरस

12

यदि आप कस्टम uiview के लिए xib फ़ाइल का उपयोग कर रहे हैं। इसे इस्तेमाल करे:

से बदलें

Bundle.main.loadNibNamed("UserView", owner: self, options: nil)

सेवा:

let bundle = Bundle(for: UserView.self) 
bundle.loadNibNamed("UserView", owner: self, options: nil)

8

किसी भी xib फ़ाइल के लिए 'ट्रेट वेरिएशन का उपयोग करें' (पहचान और प्रकार पैनल) को निष्क्रिय करने का प्रयास करें जो आपके स्टोरीबोर्ड में उपयोग किए जाने वाले कस्टम दृश्यों के लिए हो सकता है।


7

व्युत्पन्न डेटा फ़ोल्डर से फ़ोल्डर्स (जो इस प्रोजेक्ट से संबंधित है) को हटाकर मेरी समस्या हल हो गई थी। आप फ़ाइल -> प्रोजेक्ट सेटिंग -> पर क्लिक करके ऐसा कर सकते हैं, फिर एरो साइन डेसाइड / यूजर्स /.../Xcode/DerivedData पर क्लिक करें DerivedData फ़ोल्डर पर क्लिक करें, आपको अपने प्रोजेक्ट का नाम दिखाई देगा जिसका नाम है फोल्डर। अपनी परियोजना को खोलने के लिए xcode को छोड़ दें, इस चरण का उपयोग करके प्रोजेक्ट को साफ़ करें-> फिर प्रोजेक्ट का निर्माण करें: उत्पाद-> बिल्ड ये आपकी समस्याओं का समाधान करेंगे।


4

@Maria द्वारा प्रदान किया गया सही उत्तर :

पर क्रैश रिपोर्ट की जाँच करें ~/Library/Logs/DiagnosticReports

वैकल्पिक तरीका :

  1. खुला हुआ Spotlight

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

  1. प्रकार console.app

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

  1. चुनते हैं Crash reports

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

  1. IBDesignablesAgent-iOSक्रैश लॉग की समीक्षा करने के लिए एक की जाँच करें

कंसोल का उपयोग करने से मुझे अपनी समस्या को हल करने में मदद मिली। Xcode में जो था उससे कहीं अधिक विस्तृत संदेश।
एंड्रयू मूर


3

मैंने परियोजना को हल करने का प्रयास किया और इस समस्या को हल नहीं किया।

लेकिन प्रोजेक्ट को बंद और फिर से खोल दिया।


2

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

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

समाधान 2: - व्युत्पन्न डेटा को हटाने का प्रयास करें

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

1
क्या आप इस बारे में विस्तार से बता सकते हैं कि यह वास्तव में समस्या का समाधान कैसे करता है?
पौला हस्सेंटेन्फुएल

इस मुद्दे को हल किया है, लेकिन अभी भी पता नहीं क्यों असहज है कि use_frameworks क्योंकि स्विफ्ट परियोजना सही के लिए thats
अभिषेक

मेरा पॉडफाइल पहले से ही चौखटे का उपयोग कर रहा है, कोई सुझाव जो अतीत को असहज कर रहा है?
mmr118

@ moni15 i ने एक और संभावित समाधान जोड़ा। कृपया जांचें।
आशीष पाइसी

फली फ़ाइल में #use_frameworks को हटाना और DerivedData को साफ़ करना मेरे लिए काम आया।
जुगल देसाई

2

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

मैंने UIView के लिए अपने IBDesignable एक्सटेंशन पर टिप्पणी करने का प्रयास करने का निर्णय लिया और इसने समस्या को तुरंत ठीक कर दिया। तो, इसे ठीक करने के लिए, इस मुद्दे को पैदा करने वाले विस्तार को ढूंढें और सुनिश्चित करें कि IBDesignable क्लास बनाकर और आवश्यक इनिशियलाइज़र्स प्रदान करके निम्न इनिट्स को सेट करना है:

@IBDesignable class RoundedView: UIView {

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

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

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    sharedInit()
}

func sharedInit() {
}
}

महत्वपूर्ण: जिस आइटम का आप उपयोग कर रहे हैं उस पर नए वर्ग को जोड़ना याद रखें।


1
जैसा कि इसके दस्तावेज़ीकरण में कहा गया है, अपनेFForInterfaceBuilder () के कार्यान्वयन में super.prepareForInterfaceBuilder () को कॉल करना न भूलें।
Jaime S

1

एक ही त्रुटि का सामना करना पड़ा: UITextField को अनुकूलित किया था और इंटरफ़ेस बिल्डर का उपयोग करके, कंसोल में त्रुटि को अनइम्प्लीमेंटेड इनिशियलाइज़र 'init (फ्रेम :)') के वर्ग "CustomField" के लिए उपयोग किया था

त्रुटि को ठीक करने के लिए इनिलाइज़र जोड़ा गया


1

मुझे नवीनतम XCode संस्करण के अपडेट के बाद इस समस्या का सामना करना पड़ा। ऊपर वर्णित कई समाधानों की कोशिश करने के बाद, मैं केवल काफी Xcode और फिर सिस्टम बंद कर देता हूं और इसे चालू करता हूं और जो मेरे लिए काम करता है।


0

आवश्यक परिवर्तन करने के बाद, स्टोरीबोर्ड या मेरे मामले में एक .xib को "XCode 7" में खोलने के लिए, सहेजें और बंद करें। त्रुटियों को दूर करने के लिए यह केवल एक स्टॉप गैप उपाय है लेकिन अंततः आपको उन्हें ठीक करना होगा या ऐसा तब तक करना होगा जब तक आप नहीं कर पाते हैं।


0

मेरे मामले में, मैं एक पुस्तकालय का उपयोग कर रहा था जो कि उपवर्ग था UIView। यह उपयोग कर रहा था IB_DESIGNABLE, और कॉल को गायब कर रहा था [super awakeFromNib]। एक बार मैंने इस विधि में कॉल जोड़ दिया, तो बग दूर हो गया।

मुझे यकीन नहीं है कि अगर तथ्य यह है कि यह लागू IB_DESIGNABLEकिया गया था इस में एक प्रभाव था।


आपने [सुपर awakeFromNib] के लिए कोड कहाँ जोड़ा है? क्या आप अपना कोड साझा कर सकते हैं?
दीजे

0

यह मेरे लिए सबसे आसान तरीका है: इस स्क्रिप्ट को अपने साथ जोड़ें Podfile

Podfile:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if target.product_type == "com.apple.product-type.bundle"
    target.build_configurations.each do |config|
      config.build_settings['CONFIGURATION_BUILD_DIR'] = '$PODS_CONFIGURATION_BUILD_DIR'
    end
  end
end

स्रोत:

@IBDesignable के लिए यह समाधान यहां पाया जा सकता है: https://github.com/CocoaPods/CocoaPods/issues/5334

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