@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
'programing' 카테고리의 다른 글
Swift 배열에서 요소의 합계를 찾는 중 (0) | 2023.04.14 |
---|---|
버전 vs X코드 내장 (0) | 2023.04.09 |
코드 골프:Excel 열 이름에 해당하는 숫자 (0) | 2023.04.09 |
커밋되지 않은 기존 작업을 Git의 새 분기로 이동 (0) | 2023.04.09 |
View Model Locator란 무엇이며 Data Templates와 비교한 장점은 무엇입니까? (0) | 2023.04.09 |