programing

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

megabox 2023. 4. 9. 21:19
반응형

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

UITextView의 매우 간단한 서브클래스가 있습니다.이 서브클래스는 텍스트필드 오브젝트에 네이티브로 있는 "Placeholder" 기능을 추가합니다.서브클래스의 코드는 다음과 같습니다.

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에서 Identity Inspector로의 PlaceholderTextView, , 을수Placeholder속성 검사기에 문제가 없습니다.이 코드는 앱을 실행할 때 올바르게 작동하지만 인터페이스 작성기에 자리 표시자 텍스트가 표시되지 않습니다.또한 다음과 같은 논블로킹 오류도 발생합니다(이 때문에 디자인 시 렌더링되지 않았을 수 있습니다).

오류: IB Designables:자동 레이아웃 상태를 업데이트하지 못했습니다.인터페이스 빌더 코코아 터치 툴이 충돌했습니다.

오류: IB Designables:자리 표시자 인스턴스를 렌더링하지 못했습니다.TextView: 뷰를 렌더링하는 데 200밀리초 이상 걸렸습니다.도면 코드의 성능이 저하될 수 있습니다.

이러한 에러의 원인을 알 수 없습니다.drawRect()를 덮어쓰지도 않기 때문에 두 번째 오류는 의미가 없습니다.좋은 생각 있어요?

Interface Builder Coco Touch Tool 。, 있다, 있다, 라고 되어 있습니다.~/Library/Logs/DiagnosticReports 붙여진 이름 붙였습니다.IBDesignablesAgentCocoaTouch_*.crash제 경우 코드 내의 문제를 식별하는 유용한 스택 트레이스가 포함되어 있습니다.

저는 같은 문제를 몇 번 겪었습니다.두 번 모두 IBDesignable Nib를 스토리보드에 로드하고 있을 때 시작되었는데, Nib가 뷰에 들어가지 않았습니다(즉, UIView에서 버튼이 떨어져 있었지만 Nib에는 아직 있습니다).일단 Xcode를 수정한 후에도 오류가 발생했기 때문에 Xcode가 임의로 오류를 발생시키지 않을 때까지 다시 시작하였습니다.

이게 도움이 됐으면 좋겠어요.

업데이트: "Interface Builder Coco Touch Tool"이라는 이름의 프로세스를 모두 종료하고 Xcode를 재시작하면 오류가 사라집니다.이게 항상 먹힐지 안 먹힐지 모르겠어.

제 경우, 초기 단계에서 다음 작업을 하고 있었습니다.WithFrame/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];

이게 누군가에게 도움이 될 것 같아서요

하고 Interface Builder를 사용할 수 .Editor,Debug Selected Views '일명 '일부러'를 출시한다.IBDesignableAgentCocoaTouch모든 브레이크 포인트(예외 브레이크 포인트 포함)가 동작해, 뷰가 크래쉬 하는 장소를 정확하게 특정할 수 있는 경우의 디버깅세션

Xcode 8의 경우 - Swift

@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()
    }
}

설계 가능 파일을 렌더링하는 인터페이스 빌더와 유사한 문제가 발생했습니다.

답변에 제시된 기술을 사용하여 이미지 리터럴의 사용까지 문제를 추적할 수 있었습니다.

렌더링 크래시

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

렌더링 크래시 없음

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

실제로 스토리보드의 뷰에 오래된 사용자 정의 속성(현재 뷰에는 유효하지 않음)이 있는 경우 에이전트가 충돌할 수 있습니다.

게다가, 가끔 X코드라는 끔찍한 버그 때문에 그런 일이 생기기도 하고요.확인하려면 스토리보드에서 Editor > Automatically Refresh Views 체크박스를 끄고 다른 파일로 이동하여 프로젝트를 청소하고 재시작합니다.스토리보드에 다시 들어간 후 Editor > Refresh Views 순으로 클릭하여 다시 자동으로 확인할 수 있습니다.그것도 한 번 제 고민을 해결해주셨어요.

둘 다 기능하지 않으면 IBDesignable 뷰에 문제가 있을 수 있으므로 스토리보드에서 크래시된 뷰를 선택하고 [에디터(Editor)]> [디버깅 뷰(Debug Views)]를 클릭하여 디버깅합니다.

이 질문에는 해당되지 않지만, 다른 사람을 도울 수 있을지도 모릅니다.

@IBDesignable 클래스에서 둘 다 구현하지 않았을 때도 같은 문제가 있었습니다.

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

    // custom setup
}

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

    // custom setup
}

저도 같은 문제가 있어서 프로젝트 Podfile에 use_frameworks!를 추가하여 해결했습니다.

도움이 되길 바랍니다.

저 같은 경우에는 OneSignal에 문제가 있었습니다.버전 2.2.0 이후에 버그가 있는 것 같습니다.2.1.6으로 바꾸면 모든 것이 다시 좋아집니다!

이것 좀 봐.

제 경우, 그것은 제가 사용하고 있던 카르타고 틀과 관련이 있었습니다.실행 경로 검색 경로 빌드 설정에 $(PROJECT_DIR)/Carthage/Build/iOS를 추가해야 했습니다.

디버깅을 해보니 UI를 수정하는 클래스가 몇 개 있습니다.일반적으로 실행 시 UILabel 또는 UIView 및 도면 UI를 분류하는 다른 클래스의 하위 클래스인 마르켈라벨로 자동 레이아웃 엔진과 충돌합니다.이러한 사용자 정의 보기에 대해 고정 너비 또는 높이를 지정하십시오.문제가 해결되지 않는 경우는, 다음의 해결 방법을 시험해 주세요.

해결책 1: - 팟 파일 내의 언코멘트 #use_frameworks.

솔루션 2: - 파생 데이터를 삭제해 보겠습니다. 1. Xcode Editor 창을 닫고 시뮬레이터를 종료합니다.-> 2. Xcode Preferences로 이동합니다.-> Locations -> 3. 파생 데이터 경로를 나타내는 작은 회색 화살표를 클릭합니다. -> 4. 프로젝트 -> 5. 내 폴더를 모두 삭제하고 6. Xcode를 다시 엽니다.

팟 파일 하단에 추가하여 실행하세요.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

이 스크립트를 내 말미에 추가합니다.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

큰 문제는 @IBDesignable을 작성할 때 cocapod 파일이 UITest에 포함되지 않았는지 확인하는 것입니다.그렇지 않으면 이 크래시가 발생합니다.

당신의 xib가 스토리보드의 디자인과 같은 사이즈가 아니기 때문입니다.xib의 높이와 폭이 동일한지 확인합니다.

이 코드 줄을 놓치고 있었어요platform :ios, '7.0'문제가 해결되었습니다.포드 파일의 이 행과 포드 업데이트 문제만 해결됩니다.

앱을 실행한 적이 없기 때문에 아직 Xcode가 증명서를 작성하지 않았기 때문에 서명 증명서가 누락되어 있었습니다.일단 앱을 실행해보니IBDesignable렌더링은 정상적으로 동작했습니다.

예를 들어 다른 개발자로부터 코드를 받고 이 오류가 발생하는 경우입니다.그냥 뛰어!

pod install

이건 나한테 효과가 있었어.도움이 됐으면 좋겠다.

프로젝트에 추가된 자산 또는 글꼴을 직접 초기화하거나 사용하지 마십시오.

저는 항상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
}

모든 것을 실행했지만 MAC를 재부팅할 때까지 동작하지 않았습니다.MAC 를 재기동해 주세요.나한테는 통했어

프로젝트의 다른 곳에서 오류가 발생한 경우 시뮬레이터를 빌드하여 실행하도록 내버려두면 됩니다.설명을 하고 설계 가능한 코드를 먼저 실행하여 설계 가능한 코드를 업데이트하고 다른 코드를 주석 해제하십시오.저는 좋아요.

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

반응형