program story

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

inputbox 2020. 10. 3. 10:36
반응형

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


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

인터페이스 빌더 파일에 알 수없는 클래스 X가 있습니다.

Xcode가 내 Storyboard에서 링크 한 사용자 정의 클래스를 찾을 수 없지만 Xcode 인터페이스에서 올바르게 링크되었음을 보여주기 때문에 충돌이 발생합니다.

나는 모든 것이 올바르게 연결되어 있다고 확신합니다. 내 유일한 다른 옵션은 전체 스토리 보드 파일을 삭제하고 어떻게 든 손상 될 수 있으므로 처음부터 시작하는 것입니다.

편집 : 나는 또한 청소, 시뮬레이터 재설정, 빌드 단계 등을 엉망으로 시도했다는 것을 추가하고 싶습니다. 그 어느 것도 작동하지 않습니다.


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

이 문제를 해결하려면 Storyboard에서 각 사용자 지정 클래스 개체를 선택해야합니다 (사용자 지정보기, 사용자 지정보기 컨트롤러 자체 포함).

그런 다음 해당 개체를 선택하고 ID 검사기를 열고 "사용자 지정 클래스"아래에 모듈 옵션이 표시되어야합니다. 모듈 텍스트 상자 내부를 클릭하고 Enter 키를 누릅니다.

그게 다야! 내 모든 사용자 지정 개체에 대한 현재 모듈은 Xcode 6 베타 4에서 내부적으로 잘못 설정되었을 것입니다. 그러나 검사기에서 시각적 표시가 없었습니다.

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

다음은 더 명확하게하기위한 이미지입니다. 여기에 이미지 설명 입력


때때로 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">

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

@objc(ForumTopicListViewController) class ForumTopicListViewController

이거 저 한테 ..

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

여기에 이미지 설명 입력


여러 대상이있는 프로젝트

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

여기에 이미지 설명 입력


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

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

Xcode 8.1이 충돌합니다. 간단하고 성가 시게 충돌하고 아무것도 인쇄하지 않습니다. 나는 그 유령의 충돌을 한 시간 동안 쫓아 가고 있었다. IB에서 할당되지 않은 수업이 바로 이것과 똑같다는 것을 알아 내기 위해서였다. 팬텀 충돌이 발생하는 경우 먼저 IB에서 할당되지 않은 클래스를 다시 확인하십시오.


제공하는 컨트롤러가 현재 애플리케이션에서 대상 멤버십을 잃는 경우가 있습니다. 이 경우 "Module"필드에서 Enter 키를 눌러도 아무 작업도 수행되지 않습니다. 컨트롤러로 이동하여 대상 멤버십이 현재 앱으로 설정되어 있는지 확인합니다.


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

이 솔루션은 Pod (또는 Carthage ) 프레임 워크의 사용자 지정 클래스에 대한 특정 사례를 위한 것 입니다.

인프라 : XCode8, Swift3

여기에 이미지 설명 입력


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

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

다음으로 바꿉니다.

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

I can't believe how many hours I'm losing getting around bugs in the Swift compiler and Xcode 6


Selecting the proper Module for my Custom Class I solved this problem .

Here it is :

여기에 이미지 설명 입력


Enabling Inherit Module From Target took the correct target module. That solved the issue.

여기에 이미지 설명 입력


I faced this problem in Xcode 8, to resolve it I had to modify storyboard in the text editor.

In general, look up for your control and remove customModule and customModuleProvider from control entity.

Did a trick for me.


I faced this issue in Xcode 6.1 when I removed Main.storyboard , the LaunchScreen.xib file and the default ViewController classes from my project.

I fixed it by deleting the Launch Screen File and Main Interface entries from Info.plist


I had the same problem.

In my case, Xcode wasn't adding my custom class to: Target > Build Phase > Compile Sources.

So I recommend you to verify if your CustomClass.m is there.

여기에 이미지 설명 입력

I hope this helps you.


Check if your class has right Target Membership.


I googled everywhere for this. None of the answers work for me until i met 1 dude who asked me to move my project folder to desktop. It just worked automatically. Apparently if you have you project folder to deep in many folders, XCODE actually breaks.


These steps work for me.

1) Clear Derived Data.
2) Remove .h and .m files
3) Create .h and .m files Again


I solved this by opening my storyboard file as source code and using command-F to search for my unknown class and delete the custom class associated with it.


What @gfrs said is correct, you need to set the Module. However I once ran into an issue that my class wasn't listed in the Class dropdown. Eventually I removed the swift file, re-started Xcode and re-created the file. Finally the class was listed and could be used in Storyboard.

Also have a look at this answer, which looks like to solve the 'real' problem I encountered.


I solved this problem by typing in the Module name (unfortunately the drop list will show nothing...) in the Custom Class of the identity inspector for all the View controller and views.

You may also need to indicate the target provider. To achieve this objective you can open the storyboard in sourcecode mode and add the "customModuleProvider" attribute in both ViewController and View angle brackets.


My solution (Xcode 8.1 Swift 3.0):

Unknown class xxx in Interface Builder file.

Open StoryBoard as Source Code and search for xxx. Remove attribute which contains value xxx. Build and Run.


In my case, I added a flag -ObjC to Other Linker Flags in project settings to make it work. Also I tried with -all_load flag and it worked well too.

여기에 이미지 설명 입력


In my case, the class referenced in the Storyboard / xib did not have Target Membership set.

To fix, give that class's .h and .m files the same Target Membership as your other classes.

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


My solution was to remove @objc from Custom class definition.


I faced the problem when I ported the storyboard from Swift project to Objective-c project, noticing vvkuznetsov's answer, it turned out the two project using same identifier. I "Product -> Clean" and tap Enter key on the Module and Class text field. the issue went away.


I fixed this along the lines of what Laura suggested but I didn't need to recreate the files.

Using XCode 4, in the Project Navigator, select the .m file that contains the class that it is complaining about

Go to View->Utilities->Show File Inspector (this will show the File Inspector to the right, with that .m-file info)

Open the Target Membership section and make sure that your target is selected for this .m-file

When I added my .m file to my project, it didn't add it to my default target for some reason and that caused me to get the error you mentioned.


What only worked for me is actually adding the module name to the xib file...

Sooo, the xib files look like this:

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

HORRIBLE solution in my opinion, but that is supposedly how Apple wants us to do it now.

This question shows 3 possible work arounds back in beta 4 ... apparently Apple has not been very helpful in this situation according to some because they call it "Working as intended."


I had the same problem with Xcode Version 6.1 (6A1052d). I think the problem appears if you renamed your App / Xcode Project.

My solution was to add the module name in the interface builder manually.


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


저에게는 해결책이 달랐습니다. 클래스의 .m을 빌드 단계의 컴파일 된 대상 소스에 추가해야합니다.

도움이 되었기를 바랍니다!

참고 URL : https://stackoverflow.com/questions/24924966/xcode-6-bug-unknown-class-in-interface-builder-file

반응형