IT박스

@IBDesignable 오류 : IB Designables : 자동 레이아웃 상태를 업데이트하지 못했습니다 : 인터페이스 빌더 Cocoa Touch Tool이 충돌했습니다

itboxs 2020. 6. 5. 21:13
반응형

@IBDesignable 오류 : IB Designables : 자동 레이아웃 상태를 업데이트하지 못했습니다 : 인터페이스 빌더 Cocoa Touch Tool이 충돌했습니다


TextField 객체의 기본 위치 인 "자리 표시 자"기능을 추가하는 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
        }
    }
}

UITextViewIdentity Inspector에서 객체 의 클래스를로 변경 한 후 Attribute Inspector에서 속성을 올바르게 PlaceholderTextView설정할 수 있습니다 Placeholder. 이 코드는 앱을 실행할 때 훌륭하게 작동하지만 인터페이스 작성기에는 자리 표시 자 텍스트를 표시하지 않습니다. 또한 다음과 같은 비 차단 오류가 발생합니다 (디자인 타임에 렌더링되지 않는 이유라고 가정).

오류 : IB 디자인 가능 : 자동 레이아웃 상태를 업데이트하지 못했습니다 : 인터페이스 빌더 Cocoa Touch Tool이 충돌했습니다

오류 : IB 디자인 가능 : PlaceholderTextView의 인스턴스를 렌더링하지 못했습니다.보기를 렌더링하는 데 200ms보다 오래 걸렸습니다. 도면 코드 성능이 저하 될 수 있습니다.

이 오류의 원인을 파악할 수 없습니다. 두 번째 오류는 drawRect ()를 재정의하지 않기 때문에 의미가 없습니다. 어떤 아이디어?


Interface Builder Cocoa Touch Tool이 충돌하면 생성 된 충돌 보고서가 있습니다. 이들은에 위치하고 ~/Library/Logs/DiagnosticReports이름이 지정 IBDesignablesAgentCocoaTouch_*.crash됩니다. 내 경우에는 내 코드에서 문제를 식별하는 유용한 스택 추적이 포함되었습니다.


I have had the same issue a couple of times. Both times it started when I was loading an IBDesignable nib onto the storyboard when the nib was not able to fit on the view (ie I had a button off of the UIView but still in the nib). Once I fixed that Xcode still gave me errors so I restarted Xcode until it randomly stopped giving me the error.

I hope this helps.

UPDATE: I just killed all processes named "Interface Builder Cocoa Touch Tool", restarted Xcode and the error went away. Don't know if this will always work or not.


In my case, I was doing the next in the initWithFrame/initWithCoder methods to create the view:

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

It looks like I was Not supposed to use the Main Bundle, but instead the bundle of the class. So I replaced that code for the following and it worked:

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

I thought maybe this might help somebody.


You could select your custom view in Interface Builder and then use Editor, Debug Selected Views. It will launch so-called IBDesignableAgentCocoaTouch debug session when all breakpoints (including exception breakpoints) work and you could exactly identify the place your view crashes.


For Xcode 8 - Swift

Adding optional value as default value on @IBInspectable causing issue for me.

This won't work:

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

This should work:

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

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

I was experiencing the similar Interface Builder issues rendering designables.

Using the technique suggested in this answer I was able to track down the issue to the use of image literals.

Rendering crash

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

No rendering crash

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

Actually if you have some old user defined attributes (which is not valid for current view) at any view in your storyboard, that may cause your agent to crash.

Besides, sometimes it happens just because of a nasty bug of Xcode. To check it out, when you're at storyboard uncheck Editor > Automatically Refresh Views, then move to another file, clean and restart your project. After you entered storyboard again, you can click Editor > Refresh Views and check automatic one again. That one also solved my problem once.

If both didn't work, then probably you have done something wrong about your IBDesignable view, so choose your crashed views in storyboard and debug by clicking Editor > Debug Views


This is not the case for this question, but maybe I will help someone else.

I had a similar problem when in my @IBDesignable class I did not implemented both:

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

    // custom setup
}

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

    // custom setup
}

I had the same issue and I solved it by adding the 'use_frameworks!' to my project's Podfile.

Hope it helps you.


In my case it was somehow related to a carthage framework that I was using. I had to add $(PROJECT_DIR)/Carthage/Build/iOS to the Runpath Search Paths build setting


In my case, it was a problem with OneSignal. Apparently, they have a bug within the version 2.2.0 and above. Switched to 2.1.6 and everything's great again!

Check out this.


When i debugged this i found out there are some classes which are modifying UI. Typically marquelabel which is a subclass of UILabel or any other class subclassing UIView and drawing ui at run time and colliding with Autolayout engine. Try giving fixed width or height for these custom views. If it doesn't solve your problem try Following solutions:-

Solution 1:- Uncomment #use_frameworks inside your pod file.

Solution 2:- Try deleting derived data. 1. Close Editor window of your Xcode and quit simulator -> 2. Go to Xcode Preferences -> Locations -> 3. Click small grey arrow showing derived data path -> 4. Select your project -> 5. Delete all the folders inside -> 6. Quit Xcode and reopen


Add it to the bottom of your Podfile and run 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

Add this script at the end of my Podfile and performed pod install again.

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

A major issue is when you are creating @IBDesignable make sure the cocoapod file isn't included in the UITests or else it will cause this crash.


I find the reason is your xib is not the same size as the design in storyboard. Make sure the xib has the same height and width.


I was just missing this line of code platform :ios, '7.0' and problem was solved. Just this line in your pod file and update your pod issue will be resolved.


For me it was a missing signing certificate, because I never ran the app, so Xcode did not yet create a certificate. Once I ran the app, the IBDesignable rendering worked fine.


It's like if you got Code from other Developer and you get this error. Just run

pod install

This worked for me. Hope It helps.


Make sure that you are not directly initialising UIImage or UIFont using assets or fonts added in your project.

I always create a private func setUp() in my @IBDesignable custom UI classes. which is called from init(frame: CGRect), init?(coder aDecoder: NSCoder). So I finally updated the setup() as the following.

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
}

Just let it to build and run on simulator if you have error in somewhere else in project just comment it out and run designable first to update designable and uncomment the other codes. It works for me.

참고URL : https://stackoverflow.com/questions/27374330/ibdesignable-error-ib-designables-failed-to-update-auto-layout-status-interf

반응형