번들에 NIB를로드 할 수 없습니다.


111

Janrain Engage를 Appcelerator Titanium과 맞춤 모듈로 통합하려고합니다. 샘플 모듈을 만들고 Jainrain 문서에 표시된대로 JREngage 폴더를 샘플 모듈 xcodeproj로 드래그했습니다.

이제이 프로젝트에 빌드 명령을 ./build.py내린 다음를 실행하고 마지막으로 titanium run명령을 실행합니다 . 빈 화면으로 시뮬레이터에서 응용 프로그램을 시작하고 즉시 충돌하여 다음 오류가 발생합니다.

포착되지 않은 예외 'NSInternalInconsistencyException'으로 인해 앱 종료, 이유 : '번들에 NIB를로드 할 수 없음 :'NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app> (로드 됨) '이름이'JRProvidersController '입니다.

이 오류가 발생하는 이유는 무엇입니까?

답변:


213

파일 검사기에서 .xib 파일의 속성을 방문하고 선택 상자의 속성 "Target Membership"피치를 방문하면 xib 파일이 타겟과 연결됩니다.


2
또한 initWithNibName : bunle : 대신 alloc init를 사용하는 경우 검은 화면이 표시됩니다.
Robert Childan

절대적으로 사용되지 않는 .xib 파일 이 프로젝트 파일 폴더에서 중단 되어야 하는 이유를 궁금해 합니다.
Ben

자동 레이아웃 대신이 확인란을 실수로 선택 취소 한 것 같습니다. 나를 위해 충돌을 수정했습니다. 감사합니다
Yunus Nedim Mehel 2013 년

모든 대상 멤버십 확인란이 회색으로 표시됩니다. 이유가 무엇일까요?
Stas

64

Targets -> Build Phases

.xib가에 추가되었는지 확인하고 Copy Bundle Resources,없는 경우 .xib 파일을 추가합니다.


나를 위해 일했습니다. 이것은 일반적으로 xib 파일을 복사 / 복제 할 때 발생합니다. +1
VoidMain

22

모두 알아 내려고

XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];

코드에서 XXXController철자가 올바른지 확인하십시오.


nibname이 자동 입력되지 않기 때문에 쉽습니다.
chings228

1
그는 자동 입력되는 할당 바로 전에 클래스 이름을 의미했습니다. : P
Gil Sand

UIView의는 펜촉에서로드 할 수 있지만하지 않는 initWithNibName:bundle:방법
Vyachaslav Gerchicov에게

우리의 ViewController에 대해 얘기
chings228

@ chings228 XXXControlloer 및 XXXController, 차이를 볼
Zaporozhchenko 올렉산드르

15

xcode를 3.2에서 4.02로 업그레이드 한 후에도 동일한 문제가 발생했습니다 ( '번들에 NIB를로드 할 수 없음 : ..'예외). Xcode 3.2로 내 앱을 배포하면 xcode 4와 충돌하여 위에서 언급 한 예외가 발생하지만 IOS Simulator (v.4.2)에 배포하려고 할 때만 발생합니다. IOS 기기 (v.4.1) 타겟팅은 Xcode 4에서도 작동합니다.

그 이유는 .xib 파일에 거의 "숨겨진"설정이라는 것이 밝혀졌습니다.

파일 검사기에서 .xib 파일의 속성을 방문합니다. 모든 .xib 파일에 대해 '위치'속성이 '그룹에 상대적'으로 설정되었습니다. 나는 그것을 'Relative to project'로 변경했고 짜잔 : 이제 모든 .xib 파일이 IOS 시뮬레이터에 올바르게로드되었습니다!

이 이상한 Xcode4 동작에 대한 이유가 무엇인지 모르겠지만 시도해 볼 가치가 있습니까?


이것은 매우 오래된 Quartz Composer 플러그인을 컴파일 할 때 다루던 충돌을 해결했습니다.
Peter Kazazes

12

제 경우에는 매우 이상했습니다 (스토리 보드 사용). 어떤 이유로 plist에서 "Main storyboard file base name"에서 "Main nib file base name"으로 변경되었습니다.

"기본 스토리 보드 파일 기본 이름"(UIMainStoryboardFile)으로 다시 변경하면 문제가 해결되었습니다.


1
잘 했어. 같은 문제가있었습니다. 감사. 이것은 그것을 해결했습니다.
Rameez Hussain 2014

1
이것은 내 문제를 해결했습니다! 감사합니다. 내 프로젝트를 복제하고 모든 관련 파일의 이름을 바꿨습니다. 모든 것이 작동했지만 이것은. 이제 모든 것이 작동합니다!
BeccaP 2014 년

11

이 오류는 "JRProvidersController"이름이있는 .xib 파일이 없음을 의미합니다 . JRProvidersController.xib존재 하는지 다시 확인하십시오 .

당신은로드 .xib file와 함께

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];

1
안녕하세요 Hanuman, JRProvidersController.xib 파일이 있는지 확인했습니다. 나는 또한 파일 이름을 바꾸고 실행하려고 시도했지만 동일한 예외가 발생합니다.
Goje87 2011 년

호출을 initWithNibName : NSStringFromClass ([MyViewController class])로 변경해보십시오. 이 대소 문자를 구분으로도 파일 이름을 면밀히 확인
우먼


귀하가 제안한 변경 사항을 적용했지만 성공하지 못했습니다.
Goje87 2011 년

7

Objective-C보기 컨트롤러에서 사용자 지정 Swift보기를 사용하여 (예, <<PROJECT NAME>>-Swift.h파일 을 가져온 후에도) 다음 을 사용하여 펜촉을로드하려고했습니다.

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];

...하지만 NSStringFromClass([MyCustomView class])반환 <<PROJECT NAME>>.MyCustomView되고로드가 실패합니다. TL; DR All은 문자열 리터럴을 사용하여 펜촉을 잘로드했습니다.

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];

6

빌드 대상이 내 iOS 기기 중 하나 인 상태에서 제품 파일 (xyzw.app)을 마우스 오른쪽 버튼으로 클릭하고 Finder에 표시 팝업 항목을 선택했습니다. xyzw.app이있는 창이 열렸습니다. 패키지 내용 표시를 사용하여 번들을 열고 이름에 소문자 i 대신 대문자 I (zoomieView.nib 대신 zoomieVIew.nib)가있는 파일 하나를 제외하고 예상했던 모든 파일을 확인했습니다. ). 나는 xib의 파일 이름에서 대문자 I를 발견하고 그것을 변경하고 다시 빌드했습니다. Xcode는 생성 된 .nib 이름을 그대로 남겼습니다. 번들에서 zoomieVIew.nib를 삭제하고 다시 빌드했으며 Xcode가 파일을 zoomieView.nib로 정식으로 다시 생성했습니다. 앱이 기기에서 작동하기 시작했습니다.


여기 마이클이 설명하는 것과 같은 것입니다. 사용자 정의 UITableViewCell을 들고 xib 파일을 만들었습니다. .app을 열고 myCell.xib를 검색했을 때 실제로는 myCell.nib입니다. 더욱이, 앱은 장치에서만 충돌하고 시뮬레이터에서 실행할 때 xib 파일을 정상적으로로드했습니다. 재설정하는 것은 약간 까다로 웠습니다. 적어도 나를 위해. 파일을 삭제하고 대상을 정리하고 파일을 다시 복사했을 때만 작동했습니다.
Nir Pengas 2012

그것은 또한 찾아 패키지 내용을 볼 수있는 쉬운 방법 같이 마크 업
fotisgpap

doh. 어떻게 내가 다시이 일을 할 수 있을까. 감사합니다 친절한 사람 :) 나는이 문제를 연구하는 아주 초기에 있었다
heximal

6

스토리 보드에이 문제가 있었고 펜촉은 'bKD-J3-fhr-view-ZSR-8m-2da'와 같은 이름으로 불 렸습니다.

뷰 컨트롤러의 init (withCoder)에서 self.view에 하위 뷰를 추가하려고했기 때문입니다. 셀프 뷰는 아직 존재하지 않습니다.

viewDidLoad 등으로 이동했습니다!


마찬가지로 내가 (어리석게도) viewDidLoad ()가 아닌 init ()에서 테이블 뷰 델리게이트와 데이터 소스를 할당하려고 할 때 이와 같은 오류가 발생했습니다
jpb

5

프로젝트 살펴보기

Target -> Buid Phases -> Copy Bundle Resources

xib / storyborad가 빨간색으로 표시됩니다.

그냥 제거하고 프로젝트에서 누락 된 파일의 모든 참조를 제거하십시오.

이제이 스토리 보드 / xib 파일을 다시이 Copy Bundle Resources.It로 드래그 하면 파일이 여전히 빨간색으로 표시되지만 걱정하지 마세요.

프로젝트를 정리하고 빌드하십시오.

이제 프로젝트가 성공적으로 다시 실행됩니다 !!


1
두 개의 스토리 보드 "MyStoryboard.storyboard"와 "MyStoryboard ~ ipad.storyboad"를 얻었 기 때문에 이것은 내 문제를 해결했습니다. 그래서 iPad 타겟에서 "Copy Bundle Resources"
i89

5

스토리 보드 용

여기에 게시 된 모든 단일 솔루션을 시도했지만 Swift 5와 함께 Storyboard를 사용하고 있으므로 아무것도 효과가 없었습니다.

스토리 보드 테스트 앱에서 새로운 컨트롤러와 뷰를 빌드하기 시작했습니다. 제가 발견 한 것은 My View Controller의 스토리 보드 ID가 없다는 것입니다.

그래서 여기 내 해결책이 있습니다. ViewController A에서 이동하려면-> View Controller B

1 단계. 스토리 보드 : ViewControllerA가 내비게이션 컨트롤러에 포함되어 있는지 확인하세요.

2 단계. 스토리 보드에서 : 이제 코드에서 식별자로 사용할 ViewControllerB의 스토리 보드 ID를 언급 했는지 확인합니다.

여기에 이미지 설명 입력

3 단계. 마지막으로 버튼 클릭으로 ViewControllerA에서 컨트롤러를이 방식으로 푸시하고 있는지 확인합니다.

if let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB {

            if let navigator = navigationController {
                navigator.pushViewController(viewControllerB, animated: true)
            }
        }

4

XIB 이름을 삽입 할 때 .xib를 입력하지 마십시오! 이미 암시되어 있습니다!

이러지 마세요 :

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];

이 작업을 수행:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];

4

MyCustomView.swiftMyCustomView.xib 가 프레임 워크에있는 경우 Swift4 예제 입니다. 이것을 MyCustomView 의 초기화 에 넣으십시오 .

let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
if let nibView = nib.instantiate(withOwner: self, options: nil).first as? UIView {
    self.aViewInMyCustomView = nibView
    self.aViewInMyCustomView.frame = self.frame
    self.addSubview(self.aViewInMyCustomView)
    // set constraints
    self.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
} 

드디어! 저는 iOS의 모듈 식 프로젝트에서 일하고 있는데 이것이 제가 찾고있는 것입니다. 감사합니다!
Firda Sahidi

aViewInMyCustomView는 무엇입니까?
famfamfam

@famfamfam : UIView
norbDEV

tks, 이제 사용 방법을 알아요
famfamfam

3

또한 @ "MyFile.xib"와 같은 이름으로 XIB를로드하려고 할 때 실패했음을 발견했습니다. 방금 @ "MyFile"을 사용했을 때 작동했습니다. 분명히 항상 확장자를 추가합니다. 그러나 오류 메시지는 번들에서 MyFIle.xib를 찾을 수 없다는 내용입니다. MyFile.xib.xib라고했다면 큰 단서가 될 것입니다.


확장자를 추가하지 말아야하는 이유는 컴파일 된 번들에서 .xib 파일도 .nib 파일로 컴파일되기 때문입니다. 따라서 실제로 번들에 MyFile.xib가 없었으므로 이중 확장은 신경 쓰지 마십시오.
Pieter Jongsma

2

Xcode 4.6.3에서 작업하고 NIB 파일을 현지화하는 것도이 문제에 부딪 혔습니다.

나를 위해 File Inspector의 "Document Versioning"을 6.1 대신 Deployment 5.0으로 변경하는 것 외에 다른 도움이되지 않았습니다.


2

nib 파일의 이름을 바꿀 때 발생합니다. 이미있는 경우 새 펜촉 (현재 펜촉 파일 내용을 새 펜촉으로 복사)을 만들고 이전 펜촉 파일을 삭제하면 문제가 해결됩니다.

편집 : 버전 4.6.3부터 새로운 Xcode로 컨트롤러 클래스의 이름을 바꾸면 (리 팩터 기능 포함) nib 파일의 이름도 바뀌므로 nib 로딩 문제에 대해 걱정할 필요가 없습니다.


2

Xcode 6.3을 사용하여 흥미로운 경험을했습니다.

위에서 제안한대로 철자, 대상 멤버십 등으로 일반적으로 생각하는 모든 것을 시도했지만이 오류가 계속 발생했습니다. 또한 번들이 올바르게 빌드되었지만 아무 소용이 없는지 확인하기 위해 정리, 파생 데이터 삭제 및 시뮬레이터에서 앱 삭제를 여러 번 시도했습니다.

마지막으로 Brian Michael Bentley의 답변에 따라 마침내 HD의 시뮬레이터 폴더에있는 .app 파일을 검사하기로 결정했습니다. 내 펜촉이 모두 거기에 있지만 예상 abc.nib 대신 abc ~ ipad.nib가 있음을 발견했습니다. ~ ipad 부분을 제거하기 위해 이러한 모든 파일의 이름을 수동으로 변경하고 빌드했으며 작동했습니다!

~ ipad 키워드가 추가 된 이유를 알아보기 위해 프로젝트 설정을 살펴 보았고 실제로 일반> 배포 정보 탭에서 iPad 만 선택했습니다. iPhone 시뮬레이터에서 실행하려고했습니다. 나는 과거에 Xcode가 바이너리가 iPhone을 지원하지 않았고 앱 실행에 성공하지 못한다는 오류를 표시했다고 생각합니다.

시뮬레이터에서 앱을 삭제하고 동일한 작업을 다시 수행했습니다. iPad 만 지원됩니다. 이번에 .app에는 예상되는 각 스토리 보드에 대해 abc ~ iphone.nib 및 abc ~ ipad.nib가 포함되어 있으며 iPhone 시뮬레이터에서 정상적으로 실행되었습니다. 다시-배포 정보 설정에서 iPad 만 선택하면 iPhone Simulator에서 실행되지 않아야합니다. 이것은 Xcode 버그입니다.

그래서 여기 Xcode 부분에서 일관되지 않은 동작이 있으며, 안타깝게도 간헐적 인 버그이며 재현하기 어려울 수 있지만 나중에 다른 사람들에게 도움이 될 수 있도록 여기에 넣었습니다.


2

이 같은 문제가 아무 효과가 없었 더라면 파생 된 데이터로 뭔가 이상하다고 생각했습니다.

xcode 6.3.2에서는 다음을 수행해야했습니다.

XCode 메뉴-> 환경 설정-> 위치 탭-> 위치에서 파생 데이터를 상대로 변경 한 다음 다시 기본값으로 전환합니다.

그런 다음 펜촉이 잘 장착되었습니다.


방금 Derived Data 폴더를 삭제했는데 제대로 작동했습니다. 프로젝트 탐색에서 xib 파일의 이름을 변경했기 때문에 혼란스러워 보입니다. 이상한 것.
카일 Goslan

2

XIB 파일은 아마도 프로젝트 폴더 밖에있을 것입니다. 이로 인해 Target Inspector가 표시되지 않습니다. 그러나 XIB 파일을 프로젝트 폴더로 이동하면 문제가 해결됩니다.


2

주의 : Xcode는 파일 이름에 대소 문자를 구분합니다. 그것은 "재미"와 같은 "재미"가 아닙니다.


내 펜촉의 파일 이름은 FormItemCheckBoxCell.nib이고 클래스는 FormItemCheckboxCell입니다. 이름에서 "Box"를 대문자로 쓰는 데는 내 인생의 45 분이 소요되었습니다.
SafeFastExpressive

1

프로젝트에서 프레임 워크를 사용하는 경우 올바른 번들에서로드하고 있는지 확인해야합니다.

NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];

1

저에게는 셀 파일의 이름을 클래스와 동일하게 변경하여 해결했습니다.

Attributes Inspector (스토리 보드의 오른쪽 사이드 바에있는 세 번째 탭) :

  1. 셀의 식별자 (예 : "MyCellId")를 설정합니다.
  2. 셀의 클래스 설정 (예 : 파일이 "MyCellClass"인 경우 "MyCellClass"),
  3. 다음과 같이 뷰 컨트롤러에 셀을 등록합니다.

    tableView.register (UINib (nibName : "MyCellClass", 번들 : nil), forCellReuseIdentifier : "MyCellId")


0

내 이전 코드를 XCode 3x에서 XCode 4로 변환하는 동안이 문제가 발생하고 wwwwwwww.xib의 이름을 RootViewController.xib로 변경하여 해결했습니다.


0

나는 같은 문제에 부딪쳤다. 필자의 경우 펜촉 이름은 "MyViewController.xib"이고 이름을 "MyView.xib"로 변경했습니다. 이것은 오류를 제거했습니다.

또한 프로젝트를 XCode 3에서 4.2로 옮겼습니다. 경로 유형 변경은 중요하지 않았습니다.


0

또한 그 이유는 현지화를 엉망으로 만들 때 잘못된 언어 특정 폴더에서 파일이 조회되기 때문일 수 있습니다.


0

내 appDelegate에있는 뷰 컨트롤러의 이름을 리팩터링 할 때마다 시간을 낭비합니다. 리팩토링은 initWithNibName : @ "MYOldViewControllerName"에서 nib 이름을 변경하지 않습니다.


0

스토리 보드에서 뷰 컨트롤러 식별자의 이름을 바꾸면 동일한 문제가 발생했습니다.


0

git에서 분기를 전환하고 정리하는 것을 잊으면 발생할 수 있음을 알았습니다. 따라서 xib가 있고 모든 것이 발견되었지만 정확한 빌드에는 문제가있을 수 있습니다. 그러니 만일을 대비해서 청소하는 것을 잊지 마세요


0
SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil];
    [self.navigationController pushViewController:secondViewController animated:YES];

위의 코드에서 "SecondView.xib"와 같은 파일 확장자도 지정하면 잘못된 것이며 위의 오류가 발생합니다. 대신 "SecondView"를 사용하십시오. 나는 그 실수를 저질렀다.


0

이것은 나를 위해 일했습니다 .. 펜촉 이름을 올바르게 입력했는지 확인하십시오.

[[NSBundle mainBundle] loadNibNamed : @ "Graphview"소유자 : 자체 옵션 : nil];

Graphview (니브 이름)

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