programing

닙이 로드되었지만 '보기' 출구가 설정되지 않았습니다.

showcode 2023. 5. 20. 11:01
반응형

닙이 로드되었지만 '보기' 출구가 설정되지 않았습니다.

프로젝트에 새 닙 파일을 추가하고 로드하려고 했습니다.

그러나 내가 만든 보기로 이동하도록 되어 있는 도구 모음 아이콘을 클릭하면 다음과 같은 메시지가 표시됩니다.NSInternalInconsistencyException다음 메시지와 함께:

'NSInternalInconsistencyException' 예외, 이유: '-[UIViewController_loadViewFromNibNamed:bundle:]'으로 인해 앱을 종료하는 중 "..." 니브를 로드했지만 보기 출구가 설정되지 않았습니다.

그래서 저는 제 닙 파일을 열었고, 저는 참조용 콘센트가 설정되어 있지 않다는 것을 보았습니다.하지만 "새 참조 아웃렛"의 원을 클릭하여 파일 소유자에게 끌어다 놓으려 해도...보기를 표시하려면 어떻게 해야 합니까?

제가 성공한 것은 다음과 같습니다.

  • 문제가 발생하는 XIB 파일 열기
  • 왼쪽 막대에서 파일 소유자 아이콘 클릭(위쪽 막대, 노란색 테두리 상자 모양)
  • 오른쪽 사이드바가 보이지 않으면 도구 모음에서 "보기" 위의 세 번째 아이콘을 클릭합니다.오른쪽 사이드바가 표시됩니다.
  • 오른쪽 사이드바에서 네 번째 탭, 즉 신문처럼 생긴 탭을 클릭합니다.
  • 맨 위의 "사용자 정의 클래스"에서 클래스가 이 보기에 해당하는 보기 컨트롤러의 이름인지 확인합니다.그렇지 않은 경우 입력
  • 오른쪽 사이드바에서 화살표가 있는 원 모양의 탭인 마지막 탭을 클릭합니다.
  • 아래에 "보기"가 있는 "출구"가 표시됩니다.옆에 있는 원을 왼쪽 막대의 "보기" 아이콘으로 끕니다(아래쪽 아이콘은 회색 윤곽선이 두꺼운 흰색 사각형처럼 보입니다).
  • xib를 저장하고 다시 실행

이것은 Josh Justice 제안이지만 그래픽 방식으로 (사진은 내 것입니다):

  1. 파일 소유자 선택
  2. 오른쪽 패널에서 사용자 지정 클래스를 선택합니다.
  3. 사용자 지정 클래스 이름 입력

여기에 이미지 설명 입력

  1. 오른쪽 측면 패널에서 아울렛 선택
  2. 뷰 배출구를 끌어 구성요소를 봅니다.

여기에 이미지 설명 입력

마지막으로 View 컨트롤러가 롤링 코드로 인스턴스화됩니다.

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];

일반적으로 파일 소유자와 보기 간의 연결을 다시 만들어 수정할 수 있습니다.파일 소유자에서 보기로(IB 단위) 제어 끌어서 팝업 메뉴에서 보기를 선택합니다.

View Identity - Class Identity가 설정되지 않았습니다.적절한 클래스로 설정한 후 문제가 해결되었습니다.

View 컨트롤러의 "view" 속성에 할당된 UIView(또는 하위 클래스)가 있습니까?

ViewController의 xib 왼쪽 창에서 "파일 소유자"를 마우스 오른쪽 단추로 클릭하고 "보기" 출구가 설정되었는지 확인합니다.그렇지 않으면 보기로 설정합니다!

이것은 확실히 문제를 해결할 것입니다.

저는 여기 https://stackoverflow.com/a/6395750/939501 에 나와 있는 모든 것이 사실이었지만 여전히 오류가 발생했습니다. 이유는 ABCView라는 이름의 View 클래스를 생성한 후 삭제했기 때문입니다. 나중에 ABCViewController로 ViewController를 추가했기 때문에 새로운 ViewController에서 이전의 ABCView를 참조하고 있었습니다.ABC View 컨트롤러를 삭제하고 이름이 다른 새 컨트롤러를 추가하여 문제를 해결해야 했습니다.

감사해요.

XCode 4.6.3에서도 동일한 문제가 있었습니다.는 저는이붙파몇일개시다니습작했라는 이름의 몇 했습니다.MySettingsView.h그리고..m하지만 그것들을 삭제했습니다.MySettingsViewController.h 여기에, 오류를 하만여기언시불도에구고다발니오, 습히류생했가여전하지.

2013-07-05 11:48:17.205 MyApp[39024:c07] *** 탐지되지 않은 예외 'NSInternalInconsistencyException'으로 인한 앱 종료, 이유: '-[UIViewController _loadViewFromNibNamed:bundle:]'을(를) 로드했지만, 보기 아웃렛이 설정되지 않았습니다.

MySettingsViewController.xib 대신 MySettingsView.xib를 로드하려고 시도하여 여전히 "혼란" 상태임이 분명합니다.아마도 그것의 "내가 의미하는 것을 하라"는 논리는 너무 화려합니다.

그래서 MySettingsViewController.m:에서 NIB/XIB 이름을 하드코딩하여 문제를 해결했습니다.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}

저는 여기 있는 다른 답변들과는 약간 다른 방식으로 이 문제에 부딪혔습니다.

단순히 새로운 xib 파일을 만들고, 인터페이스 빌더에서 여기에 UIViewController를 추가하고, 그 UIViewController의 사용자 지정 클래스를 내 보기 컨트롤러로 설정하면 "viewoutlet이 설정되지 않았습니다" 충돌이 발생합니다.여기에 있는 다른 솔루션은 뷰 배출구를 View로 제어 끌라고 하지만, 저는 뷰 배출구가 회색으로 비활성화되어 있어 제어 끌 수 없었습니다.

회색으로 표시된 뷰 콘센트

인터페이스 빌더에 UIView 컨트롤러를 추가한 것이 실수라는 것을 알게 되었습니다.대신 UIView를 추가하고 파일 소유자의 Custom Class를 View 컨트롤러로 설정해야 했습니다.그런 다음 파일 소유자의 뷰 아웃렛을 제어하여 내 새 뷰 UIView로 끌 수 있었고 모든 것이 정상적으로 작동했습니다.

xib 방법을 사용하여 UIView를 만들고 이 문제가 있는 사용자는 Connections Inspector 메뉴 아래에 "보기" 콘센트가 없다는 것을 알게 될 것입니다.그러나 파일 소유자 사용자 정의 클래스를 UIViewController로 설정하면 "보기" 출구가 표시되며, 이 "보기" 출구는 CMND에서 사용자 정의 보기에 연결하기만 하면 됩니다.

이 문제는 보기가 설정되지 않은 클래스 폴더에 중복된 닙이 있어서 발생했습니다.xcode는 빌드를 위해 하나의 닙을 선택하고 다음에 프로젝트를 빌드할 때 다른 닙을 선택하는 것처럼 보였습니다.방금 다른 하나를 삭제했습니다.좋은 것 같군요.도!

닙에서 시작할 때 뷰 컨트롤러에서 뷰 속성이 설정되지 않은 이유를 찾기 위해 몇 시간 이상 걸렸습니다."super initWithNibName..."에 전화하는 것을 잊지 마십시오.[ ]" 보기 컨트롤러의 initWithNibName 안에 있습니다.

방금 내 것에서 고쳤어요.큰 프로젝트, 두 개의 파일.하나는 "ReallyLargeNameView"이고 다른 하나는 "ReallyLargeNameViewController"입니다.

위에서 선택한 두 번째 답변을 바탕으로, 저는 제 빌드를 청소해야 한다고 결정했습니다.Nada, 하지만 저는 여전히 XCode에 대한 의심이 있었습니다. (같은 클래스가 두 개 있기 때문에, 그것들을 추상화해야 합니다만...) 하나는 작동하고 하나는 작동하지 않습니다.파일의 소유자 이름은 복사 및 붙여넣기까지 했고, 콘센트는 다시 연결되었으며, xCode는 재부팅되었지만 여전히 아무것도 없습니다.

그래서 이름이 비슷한 클래스(뷰)를 삭제합니다.곧, "outlet inside not happing"이라는 새로운 오류가 문자 그대로 "webView not key value"가 되었습니다. 기본적으로 "Visual Studio's better"입니다.어쨌든...이름이 붙은 작은 파일을 지우면 작동합니다.

XCode가 유사한 이름의 파일로 인해 혼동됩니다.그리고 프로젝트는 약간의 재부팅이 필요할 정도로 규모가 큽니다. 그 일부일 수도 있습니다.

"XCode is 혼란스럽다"보다 더 기술적인 답변이 있었으면 좋겠지만, 음, xCode는 이 시점에서 많이 혼란스럽습니다.제가 어린 아이를 돕는 것과 같은 방식으로 혼란을 주지 않습니다.이제 작동합니다, :) 위의 것이 아무것도 해결되지 않는다면 다른 사람들에게 이익이 되어야 합니다.

빌드를 청소하는 것을 항상 기억하십시오(시뮬레이터도 마찬가지로 삭제).

이전 답변들은 저에게 문제를 거의 해결해 주었지만, 마지막 단계는 빠져 있었습니다.

  1. 동일한 이름의 xib 및 swift 파일을 만듭니다.

보기 및 Swift 파일 추가

  1. 파일 소유자를 UIView 하위 클래스로 설정합니다.

여기에 이미지 설명 입력

  1. 아웃렛을 보기에서 UIView 하위 클래스로 끌어서 "contentView"로 지정합니다.

내용 보기 추가

  1. 이 사용자 지정 이니셜라이저를 추가하여 xib가 로드될 때 컨텐츠를 첨부

내용 보기를 하위 보기로 추가

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

이제 추가하는 모든 @IBOutlet이 첨부됩니다.

건배, 리처드

저도 같은 문제가 있었는데, 제 문제는 View 컨트롤러 닙에 다른 현지화(영어)를 추가하여 현지화 독일어를 사용하는 앱이 현지화 영어를 사용하는 닙을 찾을 수 없다는 것이었습니다!!이것이 누구에게 도움이 되기를 바랍니다!

실수로 xib reference를 삭제했다가 다시 추가하는 과정에서 동일한 문제가 발생했습니다.방금 파일 소유자와 보기를 연결하여 수정했습니다.또한 FilesOwner의 사용자 지정 클래스가 예상되는 viewController인지 확인합니다.

저에게 문제는 전화로 인한 것입니다.initWithNibName:bundle:는 nib 뷰을 사용하여 nib 에 있는 입력 .tableViews저는 시야가 없기 때문에, 하나에 연결하는 것은 말이 안 됩니다.가 에신대라고 , 전면화하가내면▁instead.initWithStyle:대신 방법을 사용하고 그 안에서 닙 파일을 로드하면 예상대로 작동합니다.

저도 같은 문제가 있었지만, 조금 다른 해결책이 필요했습니다.이 경우 문제는 보기의 클래스가 아니라 파일 소유자의 클래스였습니다.이를 설정하려면 Interface Builder 창의 왼쪽 하단 모서리에 있는 "뒤로 재생" 아이콘을 클릭해야 했습니다. 그러면 File Owner, First Responder 및 View의 특성을 분리하는 옵션이 나타납니다.첫 번째 항목(투명한 큰 상자)을 클릭하면 위에서 제안한 대로 사용자 지정 클래스를 설정할 수 있습니다.

저도 같은 문제가 있었지만, 다른 해결책이 필요했습니다.이 경우 문제는 파일 소유자의 클래스가 xib 파일에 연결되지 않았다는 것입니다.

저는 오늘 밤 스위프트 UIView 컨트롤러 하위 클래스에서 매우 유사한 것을 만났습니다.이 경우, 위의 수정 사항들 중 어느 것도 작동하지 않았지만, 내 코드를 다시 주문하는 것은 조금 작동했습니다.Net-net, 동일한 파일에서 서브클래스의 정의 자체보다 먼저 서브클래스에 대한 확장자를 갖는 것은 컴파일이 잘 되었음에도 불구하고 XCode를 혼동하는 것처럼 보입니다.

비슷한 질문에 대한 답변으로 자세한 내용을 올렸습니다.

제 경우, 지정된 이니셜라이저는- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil하기 위해 되었습니다. ***ViewController 클를가더도어되Initializer 호라하다화여를정기된하니지됩출Initializer 체출초개호른다래Initializer 가스현구izer▁in▁*가다를▁will▁was니▁implement▁*izercontro됩viewed**view▁so▁eventhecontro▁,▁.출호izerller▁initial된▁initializer▁class▁be정**▁object▁calledated▁initial▁if▁to▁design▁when지ller▁other도▁initial▁i라

따라서 이 문제를 해결하기 위해 확인합니다.- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil또한 적절한 방법입니다.

제 문제는 잘못된 수업이었습니다.사용자 정의 보기에 사용자 정의 .xib를 사용했습니다.다음과 같이 올바르게 설정해야 합니다.

  1. 보기에 클래스가 없어야 합니다.
  2. 에사용클스와 함께 입니다..xib을 설정합니다.File's Owner
  3. 는 콘트가연어있다니습되에 연결되어 .File's Owner그리고 그것이 아닙니다.View.

    사진

방금 제 프로젝트에서 같은 오류가 발생했지만, 다른 이유가 있었습니다.제 경우 사용자 지정 UITableViewController 클래스에 "View"라는 이름의 IBOutlet 설정이 있었습니다.저는 그것이 기본 클래스의 멤버이기 때문에 "뷰"가 특별하다는 것을 알고 있었지만, 저는 뷰(다른 경우)도 문제가 될 것이라고 생각하지 않았습니다.코코아의 일부 지역은 대소문자를 구분하지 않는 것 같고, 아마도 xib 로딩도 그런 지역 중 하나일 것입니다.그래서 방금 DefaultView로 이름을 바꿨는데 지금은 다 정상입니다.

파일 소유자를 선택하고 ID 검사기를 열려면 해당 클래스 이름을 지정합니다.위의 방법 중 아무 것도 작동하지 않고 여전히 보기 배출구를 볼 수 없는 경우 새 참조 배출구 연결을 파일 소유자에게 제공하면 보기 배출구를 볼 수 있습니다.아웃렛 보기를 클릭하여 아웃렛 보기와 파일 소유자를 연결합니다.응용 프로그램을 실행하면 정상적으로 작동합니다.

저의 경우 xib에서 뷰가 보이지 않았습니다.xib에서 보기 크기는 = 없음(오른쪽에서 네 번째 탭)입니다.크기를 Freeform으로 설정하고 xCode를 다시 로드합니다.View가 어필되었고 View에 대한 적절한 링크를 설정했습니다.

모든 작업을 시도했지만 여전히 이 오류가 발생할 경우 클래스 파일을 처음부터 다시 작성해 보십시오. 그러나 "XIB 파일도 작성" 확인란을 선택해야 합니다.이렇게 하면 이러한 파일을 별도로 만들 때 연결되지 않은 몇 가지 항목이 자동으로 연결됩니다.이 파일이 생성된 후에는 새 XIB에 모든 파일을 잘라내어 붙여넣을 수 있습니다. 그러면 올바르게 작동할 것입니다.

저는 특히 스위프트에서 파일을 별도로 생성할 때 이 문제를 발견했습니다.

나에게 일어난 일은, 언제.

  • ViewController 클래스(.mm/h)가 Nib 파일과 연결되어 있습니다.
  • 이 ViewController의 UIView를 다른 뷰에 하위 뷰로 로드해야 합니다.

  • 우리는 이런 것을 부를 것입니다.

    -(void)initCheckView{
    
       CheckView *pCheckViewCtrl = [CheckView instance];
    
       pCheckView = [pCheckViewCtrl view];
    
       [[self view]addSubview:pCheckView];
    
       [pCheckViewCtrl performCheck];        
    
    }
    

어디에

+(CheckView *)instance{
    static CheckView *pCheckView = nil;
    static dispatch_once_t checkToken;

    dispatch_once(&checkToken, ^{
        pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
        if ( pCheckView){
            [pCheckView initLocal];
            **[pCheckView loadView];**
        }
    });

    return pCheckView;

}

여기서 loadView가 누락되었습니다.,,,, 이 줄을 추가하면 문제가 해결됩니다.

저도 같은 문제가 있었습니다. 내용 옵션 보기 속성에서 "정적 셀"을 선택했기 때문입니다."로 변경되었을 때 작동했습니다.Dynamic Prototypes스크린샷은 아래와 같습니다.여기에 이미지 설명 입력

Xcode 9.3에서도 비슷한 문제가 있었는데, 프로젝트 모듈에 "File Owner's" 속성 검사기 아래의 "Module"을 설정하면 이 문제가 해결되었습니다.

viewController가 존재하는 스토리보드 파일 또는 textEdit.app포함된 XIB 관련 파일을 열고 스토리보드 또는 XIB 이름이 viewController와 동일한지 확인한 다음 변경, 저장 및 다시 로드/재시작 Xcode.

사용자 지정 init 메서드를 사용하는 경우 올바른 것을 반환하는지 확인합니다.저는 다음과 같은 것에서 충돌한 코드 조각과 마주쳤습니다.

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

다른 클래스에서 컨트롤러는 다음과 같이 생성되었습니다.

CustomController *controller = [[CustomController alloc] init];

문제는 init 메서드에서 self는 변하지 않았으며 대신 다음과 같이 보여야 한다는 것입니다.

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}

언급URL : https://stackoverflow.com/questions/4763519/loaded-nib-but-the-view-outlet-was-not-set

반응형