런타임시“인터페이스 빌더 파일의 알 수없는 클래스 <MyClass>”오류


260

Interface Builder가을 알고 있지만 MyClass응용 프로그램을 시작할 때 오류가 발생합니다.

이것은 MyClass라이브러리의 일부일 때 발생 하며 응용 프로그램 대상에서 클래스를 직접 컴파일하면 발생하지 않습니다.


도서관에 어떻게 연결합니까?
엘리스 반 루이

종속 하위 프로젝트를 사용하고 Xcode 하위 프로젝트 제품에서 현재 대상의 "Link Binary With Library"빌드 단계로 끌어서 놓았습니다.
jhoule

클래스가 CocoaPods의 클래스라면 github.com/CocoaPods/CocoaPods/issues/491에 도움이 될 수 있습니다 .
Protocole

관련이있을 수 있습니까? stackoverflow.com/a/24924967/511299
Sunkas

답변:


222

" 인터페이스 작성기 파일의 알 수없는 클래스 MyClass "오류 에도 불구 하고이 문제는 인터페이스 작성 기와는 관련이 없지만 코드를 직접 사용하지 않기 때문에 클래스를 연결하지 않는 링커와 관련이 있습니다.

.nib 데이터 (.xib에서 컴파일 된)가 런타임에로드 될 MyClass때 문자열을 사용하여 참조되지만 링커는 코드 기능을 분석하지 않고 코드 존재 만 분석하므로 알 수 없습니다. 다른 소스 파일이 해당 클래스를 참조하지 않기 때문에 링커는 실행 파일을 만들 때 존재하지 않도록 최적화합니다. 따라서 Apple의 코드가 그러한 클래스를로드하려고하면 연관된 코드를 찾을 수없고 경고를 인쇄합니다.

기본적으로 Objective-C 대상에는 -all_load -ObjC기본적으로 플래그가 설정되어 모든 심볼을 유지합니다. 그러나 나는 C ++ 대상으로 시작했지만 그것을 가지고 있지 않았습니다. 그럼에도 불구하고, 나는 링커를 공격적으로 유지하는 방법을 찾았습니다.

원래 사용했던 핵은 다음과 같은 빈 정적 루틴을 추가하는 것이 었습니다.

+(void)_keepAtLinkTime;

아무것도하지 않지만 한 번만 호출하면됩니다.

int main( int argc, char** argv )
{
   [MyClass _keepAtLinkTime];
   // Your code.
}

이렇게하면 링커가 클래스 전체를 유지하도록하고 오류가 사라집니다.

jlstrecker가 의견에서 지적했듯이 실제로 _keepAtLinkTime메소드 를 추가 할 필요는 없습니다 . 다음과 같은 기존 통화를 간단히 호출하십시오.

   [MyClass class];

트릭을 수행합니다 (에서 파생 된 한 NSObject).

물론 코드의 어느 위치에서나 이것을 호출 할 수 있습니다. 도달 할 수없는 코드 일 수도 있습니다. 아이디어는 링커를 MyClass어딘가에 사용되는 사고 방식으로 속여서 최적화하는 데 너무 공격적이지 않도록하는 것입니다.

Xcode 6.3.2 및 Swift 1.2

뷰의 신속한 정의. 재정의해야합니다 init(coder aDecoder: NSCoder). 뷰 컨트롤러의 Objective-C 정의. 그리고 배나무의 펜촉.

수업을 선택하는 Nib 세부 정보 관리자에 모듈 이름을 추가하십시오.


2
.xib 데이터는 런타임에로드되지 않습니다. IB 컴파일러는 xib를 nib로 컴파일합니다. nib는 런타임에로드되는 것입니다.
피터 호시

19
를 수정할 필요가 없습니다 MyClass. NSObject처럼 상속 된 메소드를 호출하면 +class됩니다.
jlstrecker

10
원래 질문이 게시되었을 때 Xcode 4는 아니지만 다음은 여전히 ​​적절한 것으로 보입니다. Xcode 4에서는 오류를 제거하기 위해 더미 방법을 추가하는 대신 MyClass.mFile Inspector의 Target Membership 섹션에서 필요한 모든 대상을 확인할 수 있습니다 .
adubr

51
요즘의 또 다른 가능성은 MyClass.m이 컴파일 소스 빌드 단계에 있지 않을 수 있습니다. MyClass.h / m을 새 파일을 사용하여 만들지 않고 프로젝트에 끌어 놓으면 이런 일이 발생할 수 있습니다.
Steven Fisher

6
@JoshBruce Swift 솔루션을 설명 할 수 있습니까? 나는 그것을 정말로 이해하지 못한다.
Ryan Bobrowski

183

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

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

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

  • 열기 대상 회원 섹션과 대상이하는 .m 파일에 대한 선택되어 있는지 확인합니다

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


때로는 링커 오류가 단순히 대상에서 파일을 처음 컴파일하지 않기 때문에 발생하는 경우가 있습니다. 설명하는 것은 파일이 연관된 대상을 제어하는 ​​방법입니다. 불행히도 내 파일은 이미 대상의 일부 였지만 여전히 링크 문제가있었습니다. 이것은 아마도 내 라이브러리가 C ++ (Objective-C와 반대)이며 다른 기본 링커 플래그를 가지고 있기 때문입니다 (Alasdair Allan 및 Sijo의 게시물 참조).
jhoule

5
"타겟 멤버십"체크 상자가 이미 선택되어 있기 때문에이 제안은 약간 다르게 이루어졌지만 확인하지 않고 다시 작성했지만 새 클래스 이름을 나타 내기 위해 오류 메시지가 변경되었습니다. 상자를 다시 확인하고 다시 빌드하면 모든 것이 작동합니다. 캐시 파일을 삭제하는 것보다 훨씬 쉽습니다!
electromaggot

Xcode UI를 통한 훌륭한 솔루션. @electromaggot, 클래스를 수동으로 추가 할 때 Xcode가 혼동 될 수 있으므로 둘 이상의 파일을 추가해야 할 수도 있습니다.
Gonen

이것은 나에게도 해결책입니다. 다른 프로젝트에서 일부 클래스 파일을 끌어 왔으며 해당 클래스 파일이 예외를 제기 한 파일이었습니다.
hairbo

1
내 프로젝트에서 파일을 삭제 한 다음 나중에 같은 파일을 다시 추가하여 문제를 해결했습니다.
MindSpiker

70

이것은 실제로 인터페이스 빌더와 관련이 없으며 Xcode가 정적 라이브러리에서 심볼을로드하지 않는다는 것입니다. 이 문제를 해결하려면 프로젝트 (및 대상) 빌드 설정 키에 -all_load -ObjC플래그 를 추가해야 Other Linker Flags합니다.

Objective-C는 클래스 당 하나의 심볼 만 생성하므로 -ObjC 플래그를 사용하여 링커가 클래스 멤버도로드하도록 강제해야하며 -all_load링커 플래그 를 추가하여 정적 라이브러리에서 모든 오브젝트를 강제로 포함해야합니다 . 이 플래그를 조만간 건너 뛰면 오류가 발생 unrecognized selector하거나 여기에서 관찰 한 것과 같은 다른 예외가 발생합니다.


5
나는 단지 -ObjC깃발 만 내 경우에 그것을 고쳤다 는 것을 알았다 .
Kekoa

5
@Kekoa 이는 Xcode (LLVM) 버전 이이 답변을 작성한 사람보다 최신 버전이기 때문입니다. 요즘에는 -ObjC문제를 해결하기에 충분합니다.
까지

이것은 나에게만 도움이되었습니다. 컴파일하는 동안 모든 프레임 워크를 가져온 후에도 필요한 프레임 워크 관련 문제가 표시되었습니다.
Vaibhav Saran

-ObjC 플래그만으로도 문제가 해결되었습니다. iOS7에서 all_load 속성을 갖는 데 실제로 오류가 발생했습니다.
Sushma Satish

-all_load -ObjC를 사용하면 제품 크기가 불필요하게 증가 할 수 있습니다. 이 문제는 범주 파일에서만 프레임 워크에서만 발생합니다.
Ali Amin

26

나는 오늘 Swift를 사용 하여이 문제에 부딪쳤다.

수업 Model.h + Model.m을로 변경했습니다 Model.swift. 이 객체는 인터페이스 빌더에서와 함께 사용되었습니다 class = Model.

객체를 교체하자마자 클래스를 더 이상로드 할 수 없었습니다.

내가해야 할 일은 IB의 클래스 참조를 다음에서 변경하는 것이 었습니다.

Class = Model
Module = 

Class = Model
Module = <TARGETNAME>

<TARGETNAME>빌드 설정에서 찾을 수 있습니다. 생성 된 Swift-Header에 표시되는 이름이기도합니다.#import "TARGETNAME-Swift.h"


1
이것은 정답 인 것 같습니다. 다른 사람이 달리 말할 수 없다면, 이것은 올바른 것으로 표시되어야합니다.
Bjørn Ruthberg 8:19에

1
큰 답변 감사합니다. 나를 위해 Module이름은 드롭 다운에 바로 있었다. 내 앱의 이름이었습니다.
ChrisH

그것은 나를 위해 작동합니다. 내 문제에 대해 귀하의 답변에 언급 된 <TARGETNAME>은 클래스를 포함하는 프레임 워크의 이름입니다.
Tyler Long

나는 내 자신의 결론에 이르렀다. 이것은 또한 내가 겪고있는 실수였으며 내가 당신의 게시물을 보았을 때 나의 결과를 기꺼이 게시하려고했다. 나는 실제로 그것을 보았지만 많은 대답과 주변 소음 때문에 그것을 통과했습니다. 일부 스크린 샷으로 답변을 개선하여 다른 답변과 차별화 할 수 있다고 생각합니다. 그렇다면 그렇게 잡을 것입니다. 어쨌든 여기에 게시 해 주셔서 감사합니다. 당신은 내 공감대를 얻었다.
jvarela

AppDelegate의 경우 Interface Builder UI에서이 문제를 해결할 수있었습니다. 창 내 UI 요소의 사용자 정의 클래스의 경우 인터페이스 빌더 UI에서 사용자 정의 클래스 및 모듈을 설정할 수 없습니다. 다음을 수행해야했습니다. (1) .xib 파일을 "소스 코드"로여십시오 (오른쪽 클릭). (2) customClass 속성 옆에 "customModule = <TARGETNAME>"속성을 추가하십시오.
Poulsbo

20

"ProjectName"으로 이동하여 클릭 한 다음 "Build phases"탭으로 이동 한 다음 "compile source"를 클릭하고 "+"버튼을 클릭하면 "MyClass"를 선택하는 창이 나타납니다. m "파일을 클릭 한 다음"추가 "를 클릭하십시오.

프로젝트를 빌드하고 실행하면 문제가 해결됩니다.


예, 새로 가져온 클래스에 추가하려는 대상 상자를 모두 선택하지 않았습니다. 감사!
Joel Balmer

예! 대상 프로젝트에서 내 VC 파일이 누락되었습니다.
Sebastian Dwornik

19

Xcode4 캐시 문제이므로 / Users / your_user / Library / Application Support / iPhone Simulator / 4.3 / Applications / 아래의 모든 폴더를 삭제하십시오.

또한 iPhone에서 동일한 문제 테스트가있는 경우 실행하기 전에 이전 앱을 삭제하십시오 ...

행운을 빕니다. 파스칼


8
프로젝트 빌드 설정에서 "-all_load -ObjC"플래그를 "Other Linker Flags"키에 추가해야합니다. 이것은 Xcode 4 관련 문제가 아니며 실제로 Interface Builder와는 아무런 관련이 없습니다.
Alasdair Allan

이 솔루션은 이미 2010 년 1 월에 제안되었습니다 (위 참조).
jhoule

6
예-가장 쉬운 방법은 iOS 시뮬레이터를 열고 메뉴에서 '콘텐츠 및 설정 재설정'을 선택하십시오.
RanLearns

또는 내가 한 일을하고 시뮬레이터 홈 화면에서 문제의 앱을 삭제할 수 있습니다. 동일한 오류 메시지가 있었지만 이전 앱 대리자를 참조하고있었습니다.
spstanley

16

때때로 IBuilder가 누락되었습니다. 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">

설정을 실행하자마자 Xcode 6.3 (6D570)을 사용하면 원래 (나쁜) 설정으로 되돌아갑니다. 곤충? Objective C 프로젝트에 신속한 파일을 포함하려고합니다.
addzo

XCode 6.4에서 스토리 보드 소스 코드의 customModuleProvider = "target"을 원하는 뷰 컨트롤러 아래에 추가하면 문제가 해결되었습니다.
Amro Shafie

로 문제를 해결할 수있었습니다 customModule="MyFrameworkName". 거대한 +10
Stan

사실, 내 문제는 반대였습니다. CustomTaget을 삭제하고 싶었지만 Xcode가 xib 소스 파일을 변경하지 않았으므로 customModule = "AppName"customModuleProvider = "target"을 삭제해야 작동합니다.
Adriana

14

내 경우-목표 c 프로젝트에서 신속한 프레임 워크의 클래스를 사용하려고하면이 오류가 발생했습니다. 해결책은 아래와 같이 인터페이스 빌더 / 스토리 보드에서 클래스의 모듈 (빠른 프레임 워크)을 추가하는 것입니다. 다른 것

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


2
CocoaPods가 설치 한 Swift 프로젝트에서 Swift 프레임 워크를 사용하고 있습니다. 이 방법이 작동합니다. 모듈 이름은 프레임 워크의 이름입니다.
JsW

1
이것은 완벽하게 작동합니다. 해당 모듈을 제거해야하는 이유가 있습니까 ??
iSrinivasan27

cocoapod 프레임 워크 이슈와 완벽하게 작동합니다. 완벽한 답변을 위해 여러분에게 추천합니다.
jayant rawat

13

빌드 단계-> 소스 컴파일로 이동하여 새 .m 파일을 추가하십시오.


그러나 이전 프로젝트의 새 파일을 XCode 4.5 프로젝트에 추가 한 후 .m 파일을 컴파일 소스 목록에 추가하면 확실하게 완료되었습니다. 내 경우 "-all_load -ObjC"를 추가해도 작동하지 않았지만 아프지 않았습니다.
whyoz

13

내 경우에는 존재하지 않는 클래스에 대한 오류가 표시되었습니다! 스토리 보드 파일에 문제가 있다고 생각했습니다. 오류에서 클래스 파일을 인식하지 못하면 다음을 시도하십시오.

1) 숭고한 또는 다른 훌륭한 편집자로 프로젝트를 엽니 다. 언급 된 수업을 검색하십시오. 2) 말하는 모든 비트를 제거하십시오

customClass="UnrecognizedClassName"

3) 저장하십시오. 4) xcode로 돌아가서 프로젝트를 정리하고 지금 실행하십시오.

나를 위해 일했다.

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


OSX TextEdit 앱을 사용합니다. 이 작업에 잘 작동했습니다. 먼저 프로젝트를 닫고 Xcode를 닫으십시오.
TJ

그것도 도움이되었습니다. 동일한 customClass를 가진 객체가 두 개 이상 있었는데 아마도 컨트롤러 대신보기를 클릭하고 동일한 이름을 할당했을 것입니다.
Mc-

1
이것은 또한 내가 겪은 문제에 대한 해결책이었습니다. 이전에 부분 클래스 이름을 입력했으며 스토리 보드가 그런 식으로 저장되었습니다 (예 :) customClass="MyCla". 사용자 정의 클래스 할당을 삭제하는 대신 처음에 사용하려는 클래스에 단순히 넣는 것이 현명했습니다. :)
dave

9

여기에있는 모든 대답이 클래스가 실제로 존재한다고 가정하지 않는다면 대부분이 답변을 추가하고 싶습니다. 링커 / 컴파일러가 너무 멍청하기 때문에 링커에게 존재를 알리는 것입니다. '강제'하기 위해 해킹을 만들거나 존재합니다.

이 메시지가 실제로 존재하지 않는 클래스에 대해 이야기 할 때 내 문제가 발생합니다. 예를 들어 특정 클래스에 대한 지식이없는 이전 자식 수정으로 되돌릴 수 있습니다 . 그러나 컴파일러는 해당 클래스가 ' 존재하지 않습니다 ..

해결책?

  • 모든 것을 풀어 라 ! 먼저이 디렉토리의 모든 내용 을 삭제하여 모든 빌드 파일 등을 삭제 하십시오 ~ / Library / Developer / Xcode / DerivedData
  • 휴대 전화 자체에서 앱을 삭제하고 시뮬레이터를 사용중인 경우 시뮬레이터 내용을 지 웁니다.

당신은 그 후 가야한다


2
이것을 충분히 +1 할 수 없어 내 문제가 해결되었습니다. 내 문제는 파일이 이미 삭제 된 곳과 정확히 동일하지만 컴파일 할 때 경고가 계속 나타납니다.
Brett

스토리 보드에서 식별자를 작성해야합니다. 때로는 실수로 "클래스"필드 (Identity Inspector의) 필드에 씁니다. 따라서 컴파일러는 클래스가 존재하지 않는 이유에 대해 불평하고 있습니다!
Vincent

9

오류를 제거하는 가장 좋은 방법은 다음과 같습니다 1) 클래스 파일을 선택합니다 (하는 .m) 2)에서 " 대상 회원 ", "확인" 프로젝트 이름 항목


작동합니다. 포드를 개발하고 있었고 어떤 이유로 포드 설치 명령이 특정 대상 클래스 파일에 잘못된 대상을 적용하고있었습니다. 내가 가진 리소스 번들에 적용되었습니다. 올바른 설정은 Pods- <project-title>-<pod-title>입니다.
krosullivan

이것은 나를 위해 작동하지 않습니다. 대상 멤버쉽은 정확하지만 오류가 계속 발생합니다.
Kokodoko

8

class.h 및 .m에서 텍스트를 복사하고 프로젝트에서 해당 클래스 파일을 삭제하고 "Add File"을 사용하여 동일한 이름의 새 class.h 및 .m 파일을 작성하여이 문제를 해결했습니다. 그런 다음 코드를 새 파일에 다시 붙여 넣고 모든 것이 잘 작동했습니다. 어떻게 든 파일을 만들 때 파일이 올바르게 연결되지 않았습니다. 그 후 링커 플래그를 사용할 필요가 없었습니다.


1
파일을 처음 만들었을 때 마지막에 .m이 없었습니다. 파일 이름을 바꾸고 다시 추가하려고 시도했지만 xcode가 행복하기 전에 파일을 삭제하고 다시 만들어야했습니다.
odyth

파일이 대상의 일부가 아닐 수 있습니다. 다시 추가하면 적절한 대상에 기본 확인란이 나타납니다.
jhoule

1
이 솔루션은 나에게도 효과가 있었지만 첫 번째 클래스 (.h + .m)를 삭제하기 전에 그것이 내 목표의 일부임을 확인했습니다. 그것은 나에게 문제가 아니었다. Laura와 마찬가지로 방금 클래스를 삭제하고 다시 다른 이름으로 만들었으며이 페이지의 다른 솔루션 없이도 제대로 작동했습니다.
Nate

7

나는 이것을 마침내 고쳤습니다. 다음 코드를 .m 파일에 추가하는 것을 잊었습니다.

@implementation MyTableViewCell

@end

.xib 파일의 요소에 대한 연결이있는 테이블 셀에 대한 자리 표시 자 @interface를 만들었 기 때문에 발생했지만 클래스에 @implementation이 지정되지 않은 경우 Interface Builder에 버그가 있습니다. 찾을 수 없습니다.

나는 다른 포럼에서 .xib를 소스로보고 MyTableViewCell을 내 코드에서 주석 처리 했음에도 불구하고 보는 모든 단계를 거쳤습니다. 시뮬레이터를 재설정하려고했습니다. 심지어 모든 클래스를 인터페이스와 동일한 이름의 별도의 파일로 분리하려고 시도했지만 아무것도 작동하지 않았습니다.

내 경험에 따르면, .h / .m 파일 이름이 @interface 이름과 다른지 여부는 중요하지 않습니다. 하나 이상의 @interface를 포함하는 여러 파일이 있으며 정상적으로 작동합니다.

PPS UITableViewCell 및 UICollectionViewCell이 https://stackoverflow.com/a/22797318/539149 에서 registerClass : forCellWithReuseIdentifier :를 사용하여 컴파일 타임에 오류 를 표시하는 방법과 함께이 오류를 발생시키는 이유에 대한 자세한 설명이 있습니다 .


6

.xib에 더 이상 존재하지 않는 이전 App Delegate에 대한 링크가 없어서 발생합니다. 이렇게 수정했습니다.

  • .xib를 마우스 오른쪽 단추로 클릭하고 다른 이름으로 열기> 소스 코드를 선택하십시오.
  • 이 파일에서 이전 App 대리자를 검색하여 새 대리자로 바꿉니다.

소스 코드로 열기는 더 이상 존재하지 않지만 쉽게 마우스 오른쪽 버튼으로 클릭하고 Finder에 표시를 클릭 한 다음 파일을 마우스 오른쪽 버튼으로 클릭하고 TextEdit에서 열 수 있습니다. 물론 변경하기 전에 파일을 백업하십시오;)
Scott Allen

6

appdelegate applicatoindidfinishlanching 방법 시작시 아래 코드를 추가하면 정상적으로 작동합니다.

[마이 클래스 클래스];


5

나는이 사이트에 나열된이 답변과 다른 답변을 시도했지만 그중 어느 것도 나를 위해 분류하지 않았습니다. 이 의견 ( http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html )이 도움이되었습니다.

검색 및 검색 및 검색 후 마침내 파일에 숨겨진이 삭제 된 클래스의 이름을 발견했습니다. 마우스 오른쪽 버튼으로 클릭하고 '소스 코드로보기'를 선택하여 X 코드로 인터페이스 빌더 파일을 열어야했습니다. 그런 다음 검색하면

<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string>
<string>*this was the class name*</string>

마지막 줄을 제거해도 불행히도 수정되지 않으며 파일에 잘못된 수의 항목이 있다고 불평합니다. 위의 라인 섹션에서 해당 라인을 제거해야합니다 CustomClass.


5

제 경우에는 XCode6이 있습니다. 지정된 클래스 .m 파일은 빌드 단계에서 잘못된 위치에 있습니다. 컴파일 소스 아래 에 있었지만번들 리소스 복사


덕분에 나는 목록을보기 시작했고 내 파일이 빠졌다는 것을 알았다. 아마도 내가 그것을 만들었을 때 나는 목표를 제대로 설정하지 않았다
schmru


4

이 문제는 오래되지 않은 것 같습니다.

Xcode 8과 동일한 문제가 있었고 smilebot 과 유사하게 해결 되었습니다 .

  1. Xcode에서 스토리 보드 파일을 "소스 코드"로여십시오.

  2. 언급 된 클래스를 검색하고 말하는 모든 비트를 제거하십시오.

customClass = "인식 할 수없는 클래스 이름"

  1. 스토리 보드 파일을 "interfacebuilder-스토리 보드"로 다시 열고 앱을 다시 빌드하십시오.

3

MyClass.m과 .h를 제거하고 다시 프로젝트에 추가하면됩니다.


3

나는 '인터페이스 빌더 파일의 알 수없는 클래스 favouritesButton'을 가지고 있으며 문제의 버튼이 Identity Inspector 상단의 Class 필드에 "favouritesButton"이라는 가짜 사용자 정의 클래스가있는 스토리 북 장면까지 추적했습니다. 다음 값인 Identity Label에 해당 값을 입력했습니다.

이것을 "UIButton"으로 변경하면 문제가 해결되었습니다.


2

나는 스위프트에서 이것을 만났다.

.xib 파일을 프로젝트의 Base.lproj 폴더로 이동하면이 오류가 제거되었습니다.


이것을 공유해 주셔서 감사하지만 내 문제를 해결하지 못했습니다. 내가 마침내 찾은 해결책은 다음과 같습니다. stackoverflow.com/a/28760089/456434
Mazyod

2
나도 그 문제에 부딪쳤다. 그러나 필자의 경우 누락 된 모듈 이름이 문제였습니다. < stackoverflow.com/a/29013058/784318 >
Besi

1

Xcode 4에서 aaLuminate 앱을 Universal로 변환 할 때이 오류가 발생했습니다.이 앱은 유틸리티 템플릿을 기반으로하며 원래 Xcode 3에서 빌드되었습니다.

시간을 절약하기 위해 iPhone Main 및 Flipside Views를 Universal 앱의 적절한 이름으로 복사했습니다. "인터페이스 빌더 파일의 알 수없는 클래스 x"오류가 발생했습니다. 제 경우에는 XIB 파일이나 대상에 아무것도 없었습니다.

또한 다른 이유로 aaLuminate-Info.plist 파일을 복사했습니다. 이전 키 "Main nib file base name"이 MainWindow로 설정되었습니다.

이 키를 삭제하자마자 문제가 해결되었습니다!


1

내 경우에는 새 프로젝트를 만든 다음 여러 소스 파일을 삭제하고 동일한 이름의 소스 파일을 작업 프로젝트에서 복사하여 일부 작업을 저장하려고했기 때문에이 오류가 발생했습니다. 또한 RootViewController를 찾는 MainStoryBoard 파일을 복사했습니다. 그러나 원래 RootViewController를 삭제 한 다음 이전 제품에서 RootViewController에 추가했을 때 파일 추가 작업이 위에서 제안한대로 대상 상자를 "확인"하지 못한 것 같습니다. 새로 가져온 모든 ".m"파일을 방문하고 대상 멤버 자격 상자가 선택되어 있는지 확인하면 문제가 해결되었습니다. 무슨 일이 있었는지 이야기 보드 파일은 대상 멤버십이 확인되지 않아 링크에서 "제외 된"클래스를 찾고 있었다고 생각합니다. 대상에 필요한 파일이 파일 관리자의 대상 멤버쉽에 지정되어 있는지 확인하여 트릭을 수행했습니다. 고마워 팻! (위 참조)


1

필자의 경우 .h 파일에서 UITableView 셀의 하위 클래스의 하위 클래스를 선언했기 때문에 (두 하위 클래스의 선언은 동일한 .h 파일에 있음), 두 번째 하위 클래스의 빈 구현을 잊어 버렸습니다. .m 파일.

.h 파일에서 선언 한 서브 클래스의 서브 클래스를 구현하는 것을 잊지 마십시오! .h / .m 파일 당 하나의 클래스로 작업하는 경우 Xcode 가이 작업을 수행하므로 간단하지만 잊어 버릴 수 있습니다.


1

RateView가 UIView의 서브 클래스 인 "인터페이스 빌더의 알 수없는 클래스 RateView"가있었습니다. 스토리 보드 장면에 UIView를 드롭하고 사용자 정의 클래스 필드를 RateView로 변경했습니다. 여전히이 오류가 나타납니다.

디버깅하기 위해 클래스 이름을 RateView2로 변경하고 UIView의 사용자 정의 클래스 필드를 제외하고 일치하도록 모든 참조를 변경했습니다. RateView가 누락 된 클래스 인 경우에도 여전히 오류 메시지가 나타납니다. 오류 메시지가 사용자 정의 클래스 필드 값과 관련이 있음을 확인했습니다. 이 값을 RateView2로 변경하고 오류 메시지가 "인터페이스 빌더에서 알 수없는 클래스 RateView2"로 변경되었습니다. 종류의 진행.

마지막으로 File Inspector에서 소스 코드 파일 자체를 검사했습니다. 거기에서 소스 코드 파일 (튜토리얼에서 복사 한)이 내 타겟과 관련이 없음을 발견했습니다. 다시 말해 대상 멤버십이 없었습니다. 클래스의 소스 코드 파일을 대상 앱의 멤버로 만든 상자를 선택했는데 오류 메시지가 사라졌습니다.


1

필자의 경우 스토리 보드의 신원 관리자 (위의 '사용자 정의 클래스'아래)에서 선택한 것을 알지 못하고 "viewController"라는 클래스를 삭제했습니다.

ID 관리자의 사용자 정의 클래스 필드에서 뷰 컨트롤러에 대한 올바른 클래스를 선택하거나 프로젝트에 새 클래스를 추가하고 해당 클래스를 사용자 정의 클래스로 선택하면됩니다.

나를 위해 일했다!



1

이로 인해 약간의 견해가 생겼으며 위의 제안 중 어느 것도 오류를 제거하는 데 도움이되지 않았습니다. 운 좋게도 클래스를 사용하는 하나의 IB 객체 만 있었으므로 삭제하고 동일한 클래스로 다시 추가했습니다. 오류가 사라졌습니다 ...

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