Xcode 6 버그: Interface Builder 파일의 알 수 없는 클래스
Xcode 6 베타 4로 업그레이드 했는데, 지금 앱이 계속 다운되고 메시지가 뜬다.
인터페이스 빌더 파일에 알 수 없는 클래스 X가 있습니다.
아마도 Xcode가 내 Storyboard에서 링크된 커스텀 클래스를 찾을 수 없기 때문에 크래시되지만 Xcode 인터페이스에서 올바르게 링크되어 있음을 보여줍니다.
모든 것이 올바르게 연결되어 있다고 확신합니다.다른 방법은 스토리보드 파일 전체를 삭제하고 처음부터 다시 시작하는 것뿐입니다.왜냐하면 이 파일이 손상되었을 가능성이 있기 때문입니다.
편집: 클리닝, 시뮬레이터 리셋, 빌드 단계 조작 등을 시도했다는 점도 덧붙이고 싶습니다.그 중 어느 것도 효과가 없다.
질문을 타이핑하면서 이 문제를 해결했습니다.Xcode 6 베타 4를 사용할 때 이 문제에 직면할 수 있는 다른 사용자를 위해 질문에 답하고 여기에 남겨두기로 했습니다.
이 문제를 해결하려면 Storyboard에서 각 사용자 정의 클래스 개체를 선택해야 합니다(사용자 정의 보기 컨트롤러 자체도 포함).
그런 다음 해당 개체를 선택한 상태에서 ID 검사기를 열면 "Custom Class" 아래에 Module 옵션이 표시됩니다.마지막으로:
- 모듈 텍스트 상자 내부를 클릭하고 Enter 키를 누릅니다.
- 또는 "Inherit Module From Target" 옵션을 선택합니다.
바로 그거야!모든 커스텀 오브젝트의 현재 모듈이 Xcode 6 베타 4에서 내부적으로 잘못 설정되어 있는 것 같습니다.하지만 검사관에게 시각적 징후는 없었습니다.
모듈 텍스트 상자 내에서 Enter 키를 눌러도 작동하지 않으면 오른쪽 화살표를 선택하고 현재 모듈을 수동으로 선택한 다음 텍스트 상자를 지우고 Enter 키를 누릅니다.클래스 텍스트 상자 내에서 Enter 키를 눌러 볼 수도 있습니다(일반적으로 다른 문제를 해결하기 위해).
좀 더 하게 하기 위한 .
Xcode를 놓칠 수 있음
이 문제를 해결하려면 스토리보드를 소스 코드로 열고 다음 행을 바꿉니다.
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">
다음과 같이 입력합니다.
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
swift class의 이름을 바꾼 후 이 문제가 발생했습니다.@objc 명령을 사용하여 해결:
@objc(ForumTopicListViewController) class ForumTopicListViewController
여러 대상이 있는 프로젝트
제 경우 여러 타겟이 있는 프로젝트를 진행 중인데 "타깃에서 상속" 문제가 선택 해제되었습니다."대상으로부터 상속"을 선택하면 문제가 해결됨
이건 나한테 효과가 있었어..
컴파일된 소스(예를 들어 ViewController.m)가 추가되었는지 여부를 확인합니다.이 경우 ViewController 파일은 추가되지 않았기 때문에 오류가 발생합니다.
이 문제는 6.0 이상의 X코드에서 발생할 수 있습니다.Swift 프로젝트에서 View Controller 클래스의 이름을 변경한 후(Obj-C에서도 마찬가지일 것입니다).인터페이스 빌더를 열고 클래스 이름을 변경한 ViewController의 Identity Inspector로 이동하여 class를 선택하고 Enter 키를 누르면 됩니다.그러면 이름이 변경된 클래스가 선택한 ViewController에 재할당되고 클래스 이름 변경 후 손실된 모듈 값도 재설정됩니다.
Xcode 8.1 업데이트(아마도 8.0):
Xcode 8.1은 크래시 됩니다.심플하고 짜증나게 크래쉬만 하고 아무것도 인쇄하지 않습니다.IB에서 배정되지 않은 수업이라는 걸 알기 위해 한 시간 동안 그 유령 추락 사고를 쫓고 있었어요.팬텀 크래시가 발생하는 경우 IB에서 미할당 클래스가 있는지 다시 확인하십시오.
「」의 Inherit Module From Target
올바른 대상 모듈을 가져왔습니다.이치노
제공하는 컨트롤러가 현재 응용 프로그램에서 대상 멤버 자격을 잃을 수 있습니다.이 경우 "Module" 필드를 눌러도 아무 것도 할 수 없습니다.컨트롤러로 이동하여 대상 멤버쉽이 현재 앱으로 설정되어 있는지 확인합니다.
답변: 첨부된 스크린샷과 같이 커스텀모듈을 커스텀팟명(예에서는 커스텀클래스명)과 동일하게 설정합니다.
이 솔루션은 팟(또는 카르타고) 프레임워크의 커스텀뷰 클래스를 위한 것입니다.
인프라스트럭처: XCode8, Swift3
" " " "Module
의 를 my를 위하여Custom Class
.
여기 있습니다.
치카부즈가 제안한 것과 정반대의 방법으로 수정했습니다(단, 지적해 주셔서 감사합니다).스토리보드 파일에서 다음을 찾습니다.
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
다음과 같이 교체합니다.
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">
Swift 컴파일러와 Xcode 6의 버그를 피하기 위해 얼마나 많은 시간을 허비하고 있는지 믿을 수 없습니다.
저는 Xcode 8에서 이 문제에 직면했고, 이를 해결하기 위해 텍스트 에디터에서 스토리보드를 수정해야 했습니다.
일반적으로 컨트롤을 찾아 제거합니다.customModule
그리고.customModuleProvider
제어 엔티티로부터.
날 위해 묘기를 부렸지
저도 같은 문제가 있었어요.
제 경우 Xcode가 커스텀클래스를 [Target]> [ Build Phase ]> [ Compile Sources ]에 추가하지 않았습니다.
따라서 CustomClass.m이 있는지 확인하는 것이 좋습니다.
도움이 됐으면 좋겠네요.
"Inherit Module From Target" 체크박스를 켜야 합니다.
Xcode 6.1에서 이 문제에 직면했습니다.Main.storyboard
,그LaunchScreen.xib
파일 및 기본값ViewController
제 프로젝트의 수업입니다.
이 문제를 수정하기 위해Launch Screen File
그리고.Main Interface
에서의 엔트리Info.plist
클래스에 올바른 대상 구성원이 있는지 확인합니다.
이것 때문에 구글을 샅샅이 뒤졌어요.프로젝트 폴더를 데스크톱으로 옮기라고 한 남자를 만나기 전까지는 어떤 대답도 통하지 않았습니다.그냥 자동으로 작동했어요.많은 폴더에 프로젝트 폴더를 심도 있게 배치하면 XCODE가 실제로 파손됩니다.
이 단계들은 나에게 효과가 있다.
1) 파생 데이터를 클리어합니다.
2) .h 및 .m 파일을 삭제합니다.
3) .h 및 .m 파일을 다시 만듭니다.
이 문제를 해결하려면 스토리보드 파일을 소스 코드로 열고 명령 F를 사용하여 알 수 없는 클래스를 검색하여 관련 커스텀 클래스를 삭제했습니다.
@gfrs가 말한 것이 옳습니다.모듈을 설정해야 합니다.하지만 한번은 우리 반의 목록에 없는 문제에 부딪힌 적이 있다.Class
드롭 다운결국 swift 파일을 삭제하고 Xcode를 재시작하여 파일을 다시 만들었습니다.드디어 클래스가 리스트 되어 스토리보드에서 사용할 수 있게 되었습니다.
또한 이 답을 보세요. 이것은 제가 마주친 '진짜' 문제를 해결하는 것처럼 보입니다.
이 문제를 해결하려면 모든 View컨트롤러 및 뷰의 ID 인스펙터의 [Custom Class]에 [Module name](유감스럽게도 드롭다운리스트에는 아무것도 표시되지 않습니다)를 입력합니다.
대상 공급자를 지정해야 할 수도 있습니다.이 목적을 달성하려면 스토리보드를 소스 코드 모드로 열고 ViewController와 View 꺽쇠 괄호 양쪽에 "custom Module Provider" 속성을 추가합니다.
나의 솔루션 (Xcode 8.1 Swift 3.0):
인터페이스 빌더 파일에 알 수 없는 클래스 xxx가 있습니다.
소스 코드로 StoryBoard를 열고 xxx를 검색합니다.xxx 값이 포함된 특성을 제거합니다.구축 및 실행
.-ObjC
로로 합니다.Other Linker Flags
이치노 ★★★★★★★★★★★★★★★★★★★★★★★★★-all_load
깃발도 잘 작동했어요.
제 경우 Storyboard / xib에서 참조된 클래스에 Target Membership이 설정되어 있지 않습니다.
수정하려면 해당 클래스의.h
★★★★★★★★★★★★★★★★★」.m
다른 클래스와 동일한 대상 멤버쉽을 파일링합니다.
이 솔루션은 커스텀클래스 정의에서 @objc를 삭제하는 것이었습니다.
Xcode 버전 6.1(6A1052d)에서도 같은 문제가 있었습니다.App/Xcode Project의 이름을 바꾸면 문제가 발생한다고 생각합니다.
해결책은 모듈 이름을 인터페이스 빌더에 수동으로 추가하는 것이었습니다.
스토리보드를 Swift 프로젝트에서 Objective-c 프로젝트로 포팅했을 때 vvkuznetsov의 답변을 보고 동일한 식별자를 사용하여 두 프로젝트가 생성되었습니다.[ Product - > Clean ]를 클릭하여 [Module and Class]텍스트 필드의 [Enter]키를 탭 합니다.이슈가 사라졌어요.
나는 로라가 제안한 대로 이것을 고쳤지만 파일을 다시 만들 필요가 없었다.
XCode 4를 사용하여 프로젝트 탐색기에서 불만을 제기하는 클래스가 포함된 .m 파일을 선택하십시오.
[View] -> [ Utilities ]-> [ Show File Inspector ]으로 이동합니다(오른쪽에 파일인스펙터가 표시됩니다).
[ Target Membership ]섹션을 열고 이 .m 파일에 대해 대상이 선택되었는지 확인합니다.
프로젝트에 .m 파일을 추가했을 때 어떤 이유로 기본 타겟에 추가되지 않아 말씀하신 오류가 발생하였습니다.
문제는 사용자 오류입니다.스토리보드에 범용 UIView가 있고 Identity Inspector의 Custom Class 섹션에서 실수로 이름을 UIView에서 횡설수설로 변경했습니다.
수정은 UIView로 되돌리기만 하면 됩니다.
모듈명을 xib파일에 추가하는 것밖에 효과가 없었습니다.
xib 파일은 다음과 같습니다.
mymodule.MyViewController.xib (Module being the name of the proyect, usually)
제 생각에는 끔찍한 해결책이지만, 애플은 우리가 지금 그렇게 하기를 원하는 것 같습니다.
이 질문은 베타 4에서 가능한 세 가지 작업을 보여줍니다. 애플은 이 상황에서 "의도대로 작동"하기 때문에 분명히 도움이 되지 않았습니다.
언급URL : https://stackoverflow.com/questions/24924966/xcode-6-bug-unknown-class-in-interface-builder-file
'programing' 카테고리의 다른 글
setNeedsLayout vs. setNeedsUpdateConstraints 및 레이아웃IfNeeded vs updateConstraints필요한 경우 (0) | 2023.04.22 |
---|---|
OleDB 및 Excel 혼합 데이터 유형: 데이터 누락 (0) | 2023.04.22 |
정적 상수 문자열(클래스 멤버) (0) | 2023.04.22 |
sql 기본 키 및 인덱스 (0) | 2023.04.17 |
c# 코드로 Data Template를 빌드하려면 어떻게 해야 하나요? (0) | 2023.04.17 |