programing

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

easyjava 2023. 5. 29. 21:52
반응형

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

저는 Janrain Engage를 Appelerator Titanium과 커스텀 모듈로 통합하려고 합니다.Jainrain의 문서에 나와 있는 대로 샘플 모듈을 생성하고 JREngage 폴더를 샘플 모듈 xcodeproj로 끌어왔습니다.

이 에 빌드 명령을 에 이제이프트에명내다실리행다니합음을고을령빌드젝로▁the,다▁to▁now▁command니실합행▁project▁then▁give를 실행합니다../build.py▁the를 실행합니다.titanium run지휘권그것은 빈 화면으로 시뮬레이터에서 응용 프로그램을 실행하고 다음과 같은 오류를 던지며 즉시 충돌합니다.

감지되지 않은 예외 'NSInternalInconsistencyException', 이유: 'NIB를 번들로 로드할 수 없음: 'NSBundle </Users/abhilash/Library/Application Support/iPhone Simulator/4.2/Applications/CA167346-4091-B841-955D13913/Applications/Applications/Applications/IDR'(' 컨트롤러가 로드된 'JR' 컨트롤러 이름)'로 인해 앱을 종료합니다.

이 오류가 발생할 수 있는 이유는 무엇입니까?

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

Targets -> Build Phases

가 .xib 파일에 합니다.Copy Bundle Resources파일이 없으면 .xib 파일을 추가합니다.

모두 알아내려고 애쓰다

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

당신의 코드로, 그리고 확실히.XXXController이 정확합니다.

xcode를 3.2에서 4.02로 업그레이드한 후에도 동일한 문제가 발생했습니다('Could not load NIB in bundle:...' 제외).Xcode 3.2로 앱을 배포하는 것은 정상적으로 작동했지만, 위에서 언급한 예외를 제기한 xcode 4와 충돌합니다. 그러나 IOS Simulator(v.4.2)에 배포하려고 했을 때만 해당됩니다.IOS 장치(v.4.1)를 대상으로 하는 것도 Xcode 4와 함께 작동했습니다.

(몇 시간 동안 필사적으로 뒤적거린 끝에) 그 이유가 .xib 파일의 거의 "숨겨진" 설정이라는 것이 밝혀졌습니다.

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

저는 이 이상한 Xcode4 행동의 배경이 무엇인지 전혀 모르겠습니다만, 시도해 볼 가치가 있을까요?

저의 경우 매우 이상했습니다(스토리보드 사용).어떤 이유로 플리스트에서 "메인 스토리보드 파일 베이스 이름"에서 "메인 닙 파일 베이스 이름"으로 변경되었습니다.

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

는 . 파일에 .xib 파일이 을 의미합니다.xib인 .합니다."JRProvidersController"name. 름의 여부를 합니다. 여부를 다시 확인합니다.JRProvidersController.xib존재한다.

은 로됩니다를 로드할 입니다..xib file와 함께

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

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

그것은 제가 자신에게 서브뷰를 추가하려고 했기 때문입니다.보기 컨트롤러의 init(Coder 포함)에 표시됩니다.Self.View가 아직 존재하지 않습니다.

DidLoad를 보기 위해 이동했고 더 좋아졌습니다!

뷰 정의 뷰 Objective-C를 에도 Swift 뷰 사용)<<PROJECT NAME>>-Swift.h 저는:file),다을사음용다로했드습고니려하니브를여를 사용하여 .

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

...그렇지만NSStringFromClass([MyCustomView class])아온다를 합니다.<<PROJECT NAME>>.MyCustomView로드가 실패합니다. TL;DR 문자열 리터럴을 사용하여 닙을 로드하는 작업이 모두 잘 수행되었습니다.

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

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];

프로젝트를 살펴봅니다.

Target -> Build Phases -> Copy Bundle Resources

당신은 당신의 xib/story borad가 빨간색인 것을 발견할 것입니다.

그것을 제거하세요.또한 프로젝트에서 누락된 파일의 모든 참조를 제거합니다.

이 이 제이보스드/xib파끕다니이다로 .Copy Bundle Resources그것은 여전히 당신에게 빨간 색의 파일을 보여줄 것이지만 걱정하지 마세요.

프로젝트를 청소하고 구축하면 됩니다.

이제 프로젝트를 다시 성공적으로 실행할 수 있습니다!!

빌드 대상이 iOS 기기 중 하나인 상태에서 Product 파일(xyzw.app)을 마우스 오른쪽 버튼으로 클릭하고 Show in Finder 팝업 항목을 선택했습니다.xyzw.app이 안에 있는 창을 열었습니다. Show Package Contents를 사용하여 번들을 열었고 하나의 파일을 제외하고 예상했던 모든 파일을 보았습니다. 파일 이름은 소문자 i가 아닌 대문자 I입니다(줌).zoomieView.nib) 대신 VIew.nib).xib의 파일 이름에 대문자 I가 있는 것을 알고 변경하여 재구축했습니다. Xcode는 생성된 .nib 이름을 그대로 유지한 것 같습니다.저는 줌을 지웠습니다.번들의 VIew.nib, 재구축 및 Xcode는 정식으로 파일을 zoomieView.nib로 다시 만들었습니다.앱이 장치에서 작동하기 시작했습니다.

스토리보드용

여기에 게시된 모든 솔루션을 시도했지만 Swift 5와 함께 Storyboard를 사용하고 있기 때문에 아무 것도 작동하지 않았습니다.

스토리보드 테스트 앱에서 새로운 컨트롤러와 보기를 구축하기 시작한 지 얼마 되지 않아 My View 컨트롤러의 스토리보드 ID가 누락되었습니다.

ViewController A에서 이동하려면 --> ViewController B에서 이동하십시오.

1단계. Instoryboard: ViewController A가 NavigationController에 내장되어 있는지 확인합니다.

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

여기에 이미지 설명 입력

3단계. 그리고 마지막으로 버튼 클릭으로 ViewController A에서 컨트롤러를 이 방향으로 누르고 있는지 확인합니다.

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

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

nib 파일의 이름을 바꿀 때 발생합니다.이미 작성한 경우 새 닙(현재 닙 파일 내용을 새 닙에 복사하는 것을 의미)을 생성하고 이전 닙 파일을 삭제하면 문제가 해결됩니다.

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

프레임워크에서 MyCustomView.swiftMyCustomView.xib의 경우 Swift4 예.사용자 정의 보기의 위치에 배치합니다.

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
} 

주의: Xcode는 파일 이름으로 대소문자를 구분합니다."재미"와 "재미"는 같지 않습니다.

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

XIB 파일이 프로젝트 폴더 외부에 있을 수 있습니다.그러면 대상 검사자가 표시되지 않습니다.그러나 XIB 파일을 프로젝트 폴더로 이동하면 문제가 해결됩니다.

Xcode 4.6.3에서 작업하고 NIB 파일을 현지화하면서 이 문제도 발생합니다.

File Inspector의 "Document Versioning"을 6.1이 아닌 Deployment 5.0으로 변경하는 것 외에는 도움이 되지 않았습니다.

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

위에서 제안한 대로 스펠링, 타겟 멤버십 등 평소에 생각할 수 있는 모든 것을 시도했음에도 불구하고 계속해서 이 오류가 발생했습니다.번들이 올바르게 구축되고 있는지 확인하기 위해 여러 번 정리, 파생 데이터 삭제 및 시뮬레이터에서 앱 삭제를 시도했지만 소용이 없었습니다.

마침내 브라이언 마이클 벤틀리의 대답에 따라 HD에 있는 시뮬레이터 폴더에 있는 .app 파일을 검사하기로 결정했습니다.나는 내 모든 닙이 거기에 있지만 예상되는 abc.nib 대신 abc~ipad.nib가 있다는 것을 발견했습니다.~ipad 부분을 제거하기 위해 이 모든 파일의 이름을 수동으로 변경했고, 빌드되었으며 작동했습니다!

이러한 키워드가 ~ipad 키워드로 추가된 이유를 알아보기 위해 프로젝트 설정을 살펴보았는데, 실제로 General > Deployment Info 탭에서 iPad만 선택되었습니다.저는 아이폰 시뮬레이터에서 실행하려고 했습니다.예전에는 Xcode에서 바이너리가 아이폰을 지원하지 않아 앱을 실행할 수 없다는 오류가 발생했을 것이라고 생각합니다.

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

그래서 여기 Xcode 부분에 일관성 없는 동작이 있는데 불행히도 이것은 간헐적인 버그이고 이것은 재현하기 어려울 수 있지만, 저는 이것을 미래에 다른 사람들에게 도움이 될 수 있도록 여기에 두었습니다.

같은 문제가 있었지만 아무 것도 작동하지 않았습니다. 그래서 저는 파생된 데이터에서 이상한 것을 발견했습니다.

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

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

그런 다음 닙이 정상적으로 장착되었습니다.

저에게는, 제 셀의 파일 이름을 클래스와 동일하게 변경하는 것만으로 해결되었습니다.

특성 검사기(스토리 보드의 오른쪽 막대에 있는 세 번째 탭)에서:

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

    tableView.register(UINib(nibName: "MyCellClass", 번들: nil), CellRuseId: "MyCellId"의 경우)

저도 같은 문제에 부딪혔습니다.저의 경우 닙 이름이 "MyViewController.xib"이고 이름을 "MyView.xib"로 변경했습니다.이것은 오류를 제거했습니다.

저도 XCode 3에서 4.2로 프로젝트를 옮기고 있었습니다.경로 유형을 변경하는 것은 문제가 되지 않았습니다.

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

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

나도 같은 문제가 있고 나의.xib 파이이연 있다니에 .Target Membership프로젝트와 함께.그런 다음 파일의 대상 확인란을 선택 취소하고 다시 확인한 다음Clean그리고.Build 흥미롭게도 에게 효과가 있었습니다.흥미롭게도 그것은 저에게 효과가 있었습니다.

제 경우에는 XIB의 철자가 정확하지 않았습니다.맞춤법이 올바른지 확인하십시오.Bundle.main.loadNibName("XIB_Name", 소유자: self, 옵션:nil)

이전 코드를 XCode 3x에서 XCode 4로 변환하던 중 이 문제가 발생하여 wwwww.xib를 RootViewController로 이름을 변경하여 해결했습니다.xib의

또한 현지화를 잘못했을 때 잘못된 언어별 폴더에서 파일이 검색되었기 때문일 수 있습니다.

앱에 있는 뷰 컨트롤러 이름을 리팩터링할 때마다 딜러가 이 작업에 시간을 낭비합니다.refactoring은 initWithNibName에서 nib 이름을 변경하지 않습니다.@"MYOldViewControllerName"입니다.

스토리보드의 뷰 컨트롤러 식별자 이름을 바꾸는 것도 같은 문제였습니다.

git에서 branch를 바꾸고 청소하는 것을 잊으면 발생할 수 있다는 것을 알게 되었습니다.soxib는 거기에 있고 모든 것이 발견되지만, 정확한 빌드에는 문제가 있을 수 있습니다.그러니 혹시 모르니까 청소하는 것을 잊지 마세요.

언급URL : https://stackoverflow.com/questions/5337337/could-not-load-nib-in-bundle

반응형