Xcode 6 버그 : Interface Builder 파일의 알 수없는 클래스


600

Xcode 6 베타 4로 업그레이드했는데 이제 앱이 계속 메시지와 충돌합니다.

Interface Builder 파일에서 알 수없는 클래스 X

아마도 Xcode가 스토리 보드에서 링크 한 사용자 정의 클래스를 찾을 수 없기 때문에 충돌하지만 Xcode 인터페이스에서 올바르게 링크되었음을 보여줍니다.

나는 모든 것이 올바르게 연결되어 있다고 긍정적입니다. 내 유일한 다른 옵션은 전체 스토리 보드 파일을 삭제하고 어떻게 든 손상 될 수 있기 때문에 처음부터 시작하는 것입니다.

편집 : 또한 청소, 시뮬레이터 재설정, 빌드 단계 등을 어지럽히는 것을 추가하고 싶습니다.



1
@ ImreKelényi 당신이 맞아요. 최근에 방금 설명한 내용을 수행 한 후에 다시 발생했습니다.
Epic Byte

이것은 나를 위해 일한 stackoverflow.com/questions/1725881/...을
vrunoa

그것은 오타였습니다. Control 요소로 디버깅하십시오. 컨트롤러> 신원 관리자> 사용자 정의 클래스> 클래스를 봅니다. 해당 클래스가 정의되어 있지 않으면 삭제하십시오.
mavericks

9
참고하십시오! 이 "오류"는 다른 기원에서 비롯 될 수 있습니다. 수락 된 답변이 효과가 없다면 아래로 내려가 다음 답변을 시도하십시오. 내 상황에 대한 정답은 다섯 번째 답이었습니다.
Jacksonkr

답변:


1454

질문을 입력 하면서이 문제를 해결했습니다. Xcode 6 베타 4를 사용할 때이 문제에 직면 할 수있는 다른 사람들을 위해 내 질문에 대답하고 여기에 남겨 두는 것으로 생각했습니다.

이 문제를 해결하려면 스토리 보드에서 각 사용자 정의 클래스 객체를 선택해야합니다 (사용자 정의 뷰, 심지어 사용자 정의 뷰 컨트롤러 자체도 포함).

그런 다음 해당 개체를 선택한 상태로 자격 증명 관리자를 열고 "사용자 정의 클래스"아래에 모듈 옵션이 표시됩니다. 모듈 텍스트 상자 내부를 클릭하고 Enter를 누르십시오.

그게 다야! 내 모든 사용자 정의 객체의 현재 모듈이 Xcode 6 베타 4에서 내부적으로 잘못 설정되어 있어야합니다. 그러나 인스펙터에는 시각적으로 표시되지 않았습니다.

모듈 텍스트 상자에서 Enter 키를 눌러도 작동하지 않으면 오른쪽 화살표를 선택하고 수동으로 현재 모듈을 선택한 다음 텍스트 상자를 지우고 Enter 키를 누릅니다. 클래스 텍스트 상자 안에서 Enter 키를 눌러도됩니다 (일반적으로 다른 문제를 해결하기위한 것이지만).

다음은 더 명확하게 만드는 이미지입니다. 여기에 이미지 설명을 입력하십시오


70
나를 위해 "모듈"내부를 클릭하고 Enter 키를 누르면 일관되게 작동하지 않지만 "클래스"필드를 선택하고 Enter 키를 누르면 항상 작업을 수행했습니다.
Imre Kelényi

2
나에게 목표는 올바르게 설정되었지만 클래스는 여전히 IB에 표시되지 않았습니다. 그러나 파일의 "위치"에 "그룹에 대한 상대"대신 "프로젝트에 상대적인"경로가 있음을 알았습니다. 파일 참조와 그룹을 제거하고 프로젝트 루트에 다시 추가하면 나에게 도움이되었습니다.
knl

8
와. 이것에 감사합니다, 나는 그렇지 않으면 거기에 도착했을 것이라고 생각하지 않습니다. @objc(...)Swift 클래스 중 하나에 추가 한 후에 발생하는 문제가 해결되었습니다 .
ndbroadbent

12
이 문제는 여전히 XCode 7.2에 존재합니다. 이 솔루션은 효과가있었습니다.
Tom Fast

3
이것은 Xcode 8.3.1에서 여전히 문제입니다 ... 그러한 부끄러움
Sepehr Behroozi

99

때때로 Xcode가 누락되었습니다. customModule="AppName" customModuleProvider="target"

문제를 해결하려면 스토리 보드를 소스 코드로 열고 다음 줄을 바꾸십시오.

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

이에:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

7
실제로 내 경우에는을 제거해야 customModuleProvider했고 오류가 사라졌습니다.
Maciej Swic

3
Guillermo, 3 월 말 현재 Xcode에서 계속 발생합니다!
Ed Manners

3
@MaciejSwic customModuleProvider나에게도 해냈습니다. 감사합니다!
Sakiboy

1
xib 파일은 어떻습니까?
SleepsOnNewspapers

7
아직도 일어나고 있습니다 ... 울고 싶은 것은 이런 것입니다 :(
Luke

72

빠른 수업의 이름을 바꾼 후에이 문제가 발생했습니다. @objc 지시문을 사용하여 해결했습니다.

@objc(ForumTopicListViewController) class ForumTopicListViewController

4
이것은 나를 @objc class X위해 @objc(X) class X고쳤습니다.
Joe

1
파생 된 데이터를 삭제하려고 할 수도 있습니다. stackoverflow.com/questions/24039932/…
user1760527

단일 뷰 프로젝트 템플릿에서 기본 ViewController 클래스의 이름을 바꾼 후이 문제가 발생했습니다. @objc()'오리지널'ViewController 클래스에 지시어가 필요하지 않도록 어떤 매직이 사용되었는지 궁금합니다 .
Berend Klein Haneveld

나는 반대쪽으로 간다. 스토리 보드 파일에 모듈 이름을 지정했지만 @objc 지시문도 추가했습니다.
WeZZard

1
나를 위해 일하지 않았다. :( 모듈 이름의 해결책도
mythicalcoder

64

여러 대상이있는 프로젝트

내 경우에는 여러 대상이있는 프로젝트에서 작업하고 있으며 문제는 "대상에서 상속"이 선택되어 있지 않습니다. "대상에서 상속"을 선택하면 문제가 해결되었습니다.

여기에 이미지 설명을 입력하십시오


이것을 게시 해 주셔서 감사합니다. 내가 매우 빨리보고있는 문제를 해결했습니다.
JaredH

나는 비슷한 상황을 겪었다. (XCode 9.4.1) MxFileView (MxFileView.swift 및 MxFileView.xib로 구성됨)라는 사용자 정의 UIView를 사용하여 FilesTestA라는 iOS 앱을 만들었습니다. 그런 다음 오늘 위젯 ( "FilesTestAWidget")을 추가했습니다. 위젯에서 MxFileView를 사용하기위한 솔루션 : (1) class = "MxFileView"; (2) "대상에서 모듈 상속"을 확인하십시오 (또는 선택을 해제하고 "FilesTestAWidget"을 수동으로 입력하십시오). (3) 앱 대상에서 MxFileView.swift 및 MxFileView.xib 모두 대상 멤버쉽에 FilesTestAWidget을 포함하는지 확인하십시오.
Kenster999

이것은 Xcode 10.1의 기본 템플릿 (단일 iOS 앱 대상 및 2 개의 테스트 대상)의 새 프로젝트에서 발생했습니다. 모든 사용자 지정 뷰 컨트롤러에 대해 확인란의 선택을 취소했습니다 (따라서 자리 표시 자 텍스트는 "없음"). 스토리 보드의 모든 사용자 정의보기 컨트롤러의 확인란을 확인하고 확인한 후에 문제가 해결되었습니다.
메이슨

58

이것은 나를 위해 일했다 ..

해당 파일 (예 : ViewController.m)이 추가되었는지 여부에 관계없이 컴파일 된 소스를 확인하십시오. 내 경우에는 ViewController 파일이 추가되지 않아서 오류가 발생했습니다 ..

여기에 이미지 설명을 입력하십시오


@CarmenA에 '.m'파일 만 추가하십시오 Compile Sources. 이것은 실제로 일부에게는 올바른 (및 유일한) 솔루션입니다.
Jacksonkr

나는 운이없이 여러 가지 다른 솔루션을 시도했습니다. 이 트릭을했다. 이상한 이유로 하나의 대상에 맞는 소스 파일 하나가 누락되었습니다.
galactikuh

나도 .. 일부 갈등 해소 때문에
일어났다

46

이것은 6.0 이상의 Xcode에서 발생할 수 있습니다. Swift 프로젝트에서 일부 ViewController 클래스의 이름을 바꾼 후에 나에게 일어났습니다 (그러나 Obj-C에서도 발생할 것이라고 생각합니다). 인터페이스 빌더를 열고 클래스 이름이 바뀐 ViewController의 Identity Inspector로 이동 한 후 class를 선택하고 Enter를 누르십시오. 그러면 이름이 바뀐 클래스를 선택된 ViewController에 다시 할당하고 클래스 이름을 바꾼 후 손실되는 모듈 값을 재설정합니다.

Xcode 8.1 업데이트 (아마도 8.0도) :

Xcode 8.1이 충돌합니다. 간단하고 귀찮게 그냥 충돌하고 아무것도 인쇄하지 않습니다. 나는 IB에서 할당되지 않은 클래스라는 것을 알기 위해 팬텀 충돌을 한 시간 동안 쫓고있었습니다. 팬텀 충돌이 발생하면 IB에서 할당되지 않은 클래스를 먼저 확인하십시오.


이것에 감사합니다. 귀하의 제안에 따라 Xcode가 모듈 (IB의 클래스 아래)을 없음에서 현재로 업데이트합니다. 문제는 Enter 키를 누르지 않고 단순히 이름을 입력하면 Xcode에 의한 모듈 업데이트가 트리거되지 않는다는 것입니다.
rockiesGrizzly

이것은 나를 위해 일했습니다. 실수로 컨트롤러 클래스의 이름을 바 꾸었으므로 뷰 컨트롤러가로드 될 때 더 이상 존재하지 않았습니다.
Litehouse

32

때로는 제공하는 컨트롤러가 현재 응용 프로그램에서 대상 멤버 자격을 잃습니다. 이 경우 "모듈"필드에서 Enter 키를 누르면 아무 작업도 수행되지 않습니다. 컨트롤러로 이동하여 대상 멤버십이 현재 앱으로 설정되어 있는지 확인하십시오.


이것은 나에게도 문제였습니다. 여러 대상이 클래스 파일이 실수로 내가 만들고있는 대상에 포함되지 않도록합니다.
라이언 크레 이거

나는 파일을 병합하고 이것을 내 목표 중 하나에서 그리워합니다. 훌륭한 답변
Benjamin Jimenez

좋은 점은 merge pbx가 대상 멤버쉽 값을 위반 한 것입니다.
시스템

32

활성화 Inherit Module From Target하면 올바른 대상 모듈이 사용되었습니다. 문제가 해결되었습니다.

여기에 이미지 설명을 입력하십시오


확인하십시오. 이를 통해 문제를 해결하는 데 도움이되었습니다.
Chris8447

일반적으로 뷰 컨트롤러를 Objective-C에서 Swift로 변환 할 때이 문제가 있습니다. 마지막 글자를 다시 입력하고 Enter 키를 누릅니다. 트릭도해야합니다.
DevNebulae

30

내 대답 : 첨부 된 스크린 샷과 같이 사용자 정의 모듈을 사용자 정의 포드 이름 (예 : 사용자 정의 클래스 이름)과 동일하게 설정하십시오.

이 솔루션은 특정 경우를 위한 것입니다 : 포드 (또는 카르타고)의 커스텀 클래스 ) 프레임 워크의 .

인프라 : XCode8, Swift3

여기에 이미지 설명을 입력하십시오


18

ChikabuZ가 제안한 것과 정확히 반대의 방법으로 수정했습니다 (그렇지만 지적 해 주셔서 감사합니다). 스토리 보드 파일에서 다음을 찾으십시오.

<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에서 몇 시간 동안 버그를 잃고 있는지 믿을 수 없습니다.


17

Module내 적절한 선택Custom Class 이 문제가 해결되었습니다.

여기있어 :

여기에 이미지 설명을 입력하십시오


13

Xcode 8 에서이 문제에 직면했습니다. 를 해결하려면 텍스트 편집기에서 스토리 보드를 수정해야했습니다.

일반적으로 제어를 찾아 제거 customModule하고customModuleProvider 제어 개체에서.

나를 위해 속임수를 썼다.


하! 멋진 해킹 :)
Vexy

10

나는 같은 문제가 있었다.

필자의 경우 Xcode는 사용자 정의 클래스를 대상> 빌드 단계> 소스 컴파일에 추가하지 않았습니다.

따라서 CustomClass.m이 있는지 확인하는 것이 좋습니다.

여기에 이미지 설명을 입력하십시오

이것이 도움이되기를 바랍니다.


이것이 나에게 일어난 일이며, 다행히 내 길을 찾았습니다! 나는 대답하기 위해 여기에 왔지만 당신은 처음이었습니다. 감사!!!
Gabriel Piffaretti

9

내가 제거 할 때 내가 엑스 코드 6.1에서이 문제를 직면 Main.storyboardLaunchScreen.xib파일과 기본ViewController 내 프로젝트에서 클래스를.

에서 Launch Screen FileMain Interface항목을 삭제하여 수정했습니다.Info.plist



8

나는 이것을 위해 모든 곳에서 봤다. 내 프로젝트 폴더를 데스크탑으로 이동하도록 요청한 1 명의 친구를 만날 때까지는 대답이 없습니다. 방금 자동으로 작동했습니다. 많은 폴더에서 폴더를 깊게 투사하면 실제로 XCODE가 중단됩니다.


이전에 Xcode 6에서 얻은 이후 Xcode 7 베타 5 에서이 문제가 다시 발생했습니다. 이번에는이 방법이 효과적입니다.
Jake Lin

1
Visual Studio에서도 비슷한 문제가 있습니다. 그러나 거기에는 경로가 너무 길어서 추가하거나 편집 할 수 없다는 명확한 경고 메시지가 나타납니다. XCODE와 동일한 것이 있는지 확실하지 않지만 그 에피소드 후에 모든 프로젝트를 문서 또는 데스크탑에 보관 하고이 문제가 다시 발생하지 않았습니다. 나는 심지어 Xamarin Studio를 사용하는 누군가에게이 조언을했으며 그들에게도 도움이되었습니다.
VBaarathi

7

이 단계는 저에게 효과적입니다.

1) 파생 데이터를 지 웁니다.
2) .h 및 .m 파일 제거
3) .h 및 .m 파일 다시 생성


이것은 나를 위해 일했다. 파생 데이터를 지우지 않고도 작동하게 만들었습니다.
jaytrixz

이것은 많은 Arwin, 나에게 감사했다 만, 여전히 나는 이러한 오류를 제기 왜 내가 수업 시간에 또는 그 이전 IB에 아무것도 수정하지 않았기 때문에 점점 그 아니에요
Kirtikumar A.

7

스토리 보드 파일을 소스 코드로 열고 command-F를 사용하여 알 수없는 클래스를 검색하고 관련 사용자 정의 클래스를 삭제 하여이 문제를 해결했습니다.


6

@gfrs가 말한 것이 맞다면 모듈을 설정해야합니다. 그러나 한 번은 내 수업이 목록에없는 문제에 부딪 쳤습니다.Class 드롭 다운에 . 결국 빠른 파일을 제거하고 Xcode를 다시 시작한 다음 파일을 다시 만들었습니다. 마지막으로 수업이 목록에 작성되어 스토리 보드에서 사용될 수 있습니다.

또한 이 답변을 살펴보십시오. 이것은 내가 직면 한 '실제'문제를 해결하는 것처럼 보입니다.


클래스 파일을 제거하고 다시 추가하면 나에게 도움이되었습니다. 감사!
Nicolas Miari

6

모든 View 컨트롤러 및 뷰에 대한 자격 증명 관리자의 사용자 정의 클래스에 모듈 이름을 입력하면 (불행히도 드롭 목록에 아무것도 표시되지 않습니다 ...)이 문제를 해결했습니다.

대상 제공자를 표시해야 할 수도 있습니다. 이 목표를 달성하기 위해 스토리 보드를 소스 코드 모드로 열고 ViewController 및 View angle brackets에 "customModuleProvider"속성을 추가 할 수 있습니다.


6

내 솔루션 (Xcode 8.1 Swift 3.0) :

Interface Builder 파일에 알 수없는 클래스 xxx 가 있습니다.

StoryBoard를 소스 코드로 열고 xxx를 검색하십시오 . 값이 xxx 인 속성을 제거하십시오 . 빌드하고 실행하십시오.


WTF? 이것은 나에게 꼭 필요한 일이었습니다. 감사합니다. 나는 삭제했다customModule="" customModuleProvider=""
댄 Rosenstark는

1
이와 같은 오류가 포함 된 응용 프로그램을 앱 스토어에 게시하려고하면 응용 프로그램이 생각없이 거부됩니다.
ibrahimyilmaz

동의하지 않습니다. 방금 TestFlight 에이 방법을 수정 해야하는 빌드를 제출했으며 베타 테스트 준비가되었습니다. 실제 앱 스토어에서 어떤 일이 발생하는지 볼 수 있지만 IB 버그 IMO입니다. 감사!
Dan Rosenstark

4

제 경우에는 프로젝트 설정에 플래그 -ObjC를 추가하여 Other Linker Flags작동 시켰습니다. 또한 -all_load플래그로 시도했지만 잘 작동했습니다.

여기에 이미지 설명을 입력하십시오


3

필자의 경우 Storyboard / xib에서 참조한 클래스에 대상 멤버십 이 없습니다. 설정 .

수정하려면 해당 클래스 .h.m파일에 다른 클래스와 동일한 대상 멤버십을 부여하십시오.

대상 멤버십이 설정되지 않았습니다.


이것은 내 문제 였지만 다양한 솔루션을 시도하는 동안 Epic Byte의 답변으로 해결되는 문제가 발생했습니다. 빌드하려는 대상에 소스 코드가 있어야하지만 IB에서도 뷰 컨트롤러를 현재 대상의 일부로 설정해야합니다.
SafeFastExpressive

대상 멤버십도 내 문제였으며 어디에서나 보았지만이 답변 덕분에 해결할 수있었습니다.
Borzh


2

스토리 보드를 Swift 프로젝트에서 Objective-c 프로젝트로 이식 할 때 vvkuznetsov의 답변을 주목 하면서 문제가 발생했습니다. 동일한 식별자를 사용하여 두 프로젝트가 나왔습니다. "제품-> 청소"및 모듈 및 클래스 텍스트 필드에서 Enter 키를 누릅니다. 문제는 사라졌습니다.


2

Laura가 제안한 내용대로이 문제를 해결했지만 파일을 다시 만들 필요는 없습니다.

XCode 4를 사용하여 프로젝트 네비게이터에서 불평하는 클래스가 포함 된 .m 파일을 선택하십시오.

View-> Utilities-> Show File Inspector로 이동하십시오 (이것은 .m-file info와 함께 File Inspector를 오른쪽에 표시합니다)

대상 멤버십 섹션을 열고이 .m 파일에 대한 대상이 선택되어 있는지 확인하십시오.

내 .m 파일을 프로젝트에 추가했을 때 어떤 이유로 든 기본 대상에 파일을 추가하지 않아서 언급 한 오류가 발생했습니다.


2

내 문제는 사용자 오류였습니다. 스토리 보드와 Identity Inspector의 사용자 정의 클래스 섹션에 일반 UIView가 있었는데 실수로 이름을 UIView에서 횡설수설 한 이름으로 변경했습니다.

해결하기 위해 UIView로 다시 변경하는 것이 전부였습니다.


나는 똑같은 일을했지만 실수로 Custom View Controllers 이름을 ViewControllers 루트보기의 사용자 정의 클래스 섹션에 추가했습니다. 그래서 View Controller가 루트 뷰일 때 왜 View Controller를 찾을 수 없었는지 알고 싶었습니다.
TMin과

1

나를 위해 일한 것은 실제로 모듈 이름을 xib 파일에 추가하는 것입니다 ...

Sooo, xib 파일은 다음과 같습니다 :

mymodule.MyViewController.xib (Module being the name of the proyect, usually)

제 생각에는 끔찍한 해결책이지만, 애플이 지금 우리가 원하는 방식 일 것입니다.

이 질문은 베타 4에서 가능한 3 가지 해결 방법을 보여줍니다 ... 애플은이 상황에서 "의도 한 작업"이라고 부르기 때문에이 상황에서별로 도움이되지 않은 것 같습니다.


1

Xcode 버전 6.1 (6A1052d)과 동일한 문제가있었습니다. App / Xcode Project의 이름을 바꾸면 문제가 발생한다고 생각합니다.

내 솔루션은 인터페이스 빌더에서 수동으로 모듈 이름을 추가하는 것이 었습니다.


1

새 대상을 추가 한 다음 'New File'대화 상자를 사용하여 새 클래스를 만들었지 만 실수로 작성 대화 상자의 원래 대상뿐만 아니라 새 대상을 확인하지 못했기 때문에이 문제가 발생했습니다. 원래 목표. 해결책은 소스 파일을 삭제하고 (참조 만 제거) '파일 추가'를 사용하여 다시 추가하는 것입니다. 이번에는 두 대상을 모두 확인했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.