펜촉을로드했지만 '보기'콘센트가 설정되지 않았습니다.


742

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

그러나 내가 만든보기로 이동 해야하는 툴바 아이콘을 클릭 NSInternalInconsistencyException하면 다음 메시지가 표시됩니다.

잡히지 않은 예외 'NSInternalInconsistencyException'으로 인해 앱을 종료하는 이유 : '-[UIViewController _loadViewFromNibNamed : bundle :]에 "..."펜촉이로드되었지만 뷰 콘센트가 설정되지 않았습니다.'

그래서 펜촉 파일을 열었고 참조 콘센트가 설정되어 있지 않다는 것을 알았습니다. 그러나 "새 참조 콘센트"에 대한 원을 클릭하여 파일 소유자로 드래그하려고하는데 뷰를 표시하려면 어떻게해야합니까?


1
먼저 빌드를 청소하십시오.
LetynSOFT

필자의 경우, 실제 오류는 viewController 메서드를 재정 의하여 오류를 발생시키는 viewController (-(void) setValue : (NSNumber *) value forKey : (NSString *) 키)에 메서드를 정의한 것입니다. 나는이 방법의 이름을 바꾸었다
Christian mini

답변:


1807

당신은 옳습니다. 그러나 나는 새로운 이민자이기 때문에 모든 단계를 알아내는 데 약간의 시간이 걸렸습니다. 나를 위해 일한 것은 다음과 같습니다.

  • XIB 파일을 열어 문제를 일으킴
  • 왼쪽 막대에서 파일의 소유자 아이콘을 클릭하십시오 (위의 아이콘은 노란색 윤곽선이있는 상자 모양)
  • 오른쪽 사이드 바가 보이지 않으면 툴바에서 "보기"위의 세 번째 아이콘을 클릭하십시오. 오른쪽 사이드 바가 표시됩니다
  • 오른쪽 사이드 바에서 신문처럼 보이는 세 번째 탭을 클릭하십시오.
  • 상단의 "Custom Class"에서 Class가이보기에 해당하는 ViewController의 이름인지 확인하십시오. 그렇지 않은 경우 입력하십시오
  • 오른쪽 사이드 바에서 마지막 탭 (화살표가있는 원 모양)을 클릭하십시오.
  • 아래에 "보기"가있는 "아울렛"이 표시되어야합니다. 옆에있는 원을 왼쪽 막대의 "보기"아이콘으로 드래그합니다 (하단, 두꺼운 회색 윤곽선이있는 흰색 사각형 모양)
  • xib를 저장하고 다시 실행하십시오.

나는 코코아 에서도이 문제에 직면했으며 뷰가 뷰 계층에로드되거나 추가되지 않는 한 모든 뷰 콘센트는 NIL이었습니다. addSubview 또는 유사한 것을 호출 한 후 모든 콘센트가 연결되었습니다. 내 이야기의 재미있는 부분은 po viewcontroller.view.subviews 에 누락 된 객체가 있다는 것입니다.
Apoc

11
이 솔루션은 4 & 5 단계부터 더 이상 Xcode 7.3에서 작동하지 않습니다. 대신 인터페이스 작성기에서 파일 소유자에서 View로 Control- 드래그하십시오.
PeiweiChen

2
나를 위해 작동하지 않았습니다 (연결 관리자에 콘센트 섹션이 없으므로 연결할 콘센트 아래에 "보기"가 없음). :)
William T. Mallard

2
콘센트에 "보기"가 표시되지 않으면 파일 소유자에서 스토리 보드의보기로 ctlr- 드래그 할 수도 있습니다. 상황에 맞는 메뉴가 "보기"옵션과 함께 나타납니다
josef

1
@ WilliamT.Mallard 같은 행동을합니다. MyViewController하위 클래스의 하위 클래스이며 "아울렛" UIViewController에는 없습니다 view. 뷰 MyViewController에서 직접 서브 클래스 를 사용 UIViewController하면 "아울렛"이 나옵니다. Xcode의 마술 또는 버그.
user2319066

201

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

  1. 파일 소유자를 선택하십시오
  2. 오른쪽 패널에서 사용자 정의 클래스를 선택하십시오.
  3. 맞춤 클래스 이름을 입력하세요

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

  1. 오른쪽 패널에서 oultets를 선택하십시오
  2. 구성 요소를 보려면보기 콘센트를 끌어

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

마지막으로 View Controller는 롤링 코드로 인스턴스화됩니다.

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

1
고마워 Javier Calatrava Llavería ... 한 시간 동안 내 머리를 때린 후 많은 도움이되었습니다!
BharathRao

Exito muchas gracias
브루노 소사 빠른 태그

나는 5 단계를 놓쳤다
hamada147

73

일반적으로 파일 소유자와보기를 다시 연결하여 문제를 해결할 수 있습니다. 파일 소유자에서보기 (IB)로 Control- 드래그하고 팝업 메뉴에서보기를 선택하십시오.


62

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


안녕 @ 존, 나는 이것을했지만 여전히이 예외가 발생합니다.
Mansuu ....

29

yourViewController의 "view"속성에 UIView (또는 서브 클래스)가 할당되어 있습니까?

yourViewController에 대한 xib의 왼쪽 분할 창에서 "파일 소유자"를 마우스 오른쪽 단추로 클릭하고 "보기"콘센트가 설정되어 있는지 확인하십시오. 그렇지 않은 경우보기로 설정하십시오!

이것은 분명히 문제를 해결합니다


2
명확하고 간결한 답변.
sark9012

15

나에게 여기에 https://stackoverflow.com/a/6395750/939501 에 언급 된 모든 것이 사실이지만 여전히 오류가 발생했습니다. 이유는 ABCView라는 이름의 View 클래스를 만든 다음 나중에 삭제했습니다. ABCViewController 그래서 어떻게 든 그것이 새로운보기 컨트롤러에서 오래된 ABCView를 참조하고 있었기 때문에 ABCViewController를 삭제하고 내 문제를 해결하는 다른 이름의 새 것을 추가해야했습니다.

감사


2020 년에도 여전히 버그.
Tamás Sengel

15

XCode 4.6.3과 동일한 문제가있었습니다. 나는라는 이름의 두 파일을 시작했다 MySettingsView.h.m하지만 찬성을 삭제 MySettingsViewController.h,하지만 힌트의 대부분이 여기에 언급 시도해도에도 불구하고, 그것은 여전히으로 erroring 유지

2013-07-05 11 : 48 : 17.205 MyApp [39024 : c07] *** catch되지 않은 예외 'NSInternalInconsistencyException'으로 인해 앱을 종료하는 이유 : '-[UIViewController _loadViewFromNibNamed : bundle :]에 "MySettingsView"펜촉이 있지만 뷰 콘센트가로드되었습니다. 설정되지 않았습니다. '

MySettingsView Controller .xib 대신 MySettingsView.xib를로드하려고 시도했지만 여전히 "혼란"상태였습니다 . 어쩌면 그것의 "내가 무슨 뜻인지"논리가 너무 환상적 일 수도 있습니다.

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

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

10

xib 메소드를 사용하여 UIView를 작성하고이 문제점이있는 사용자에게는 연결 관리자 메뉴 아래에 "보기"콘센트가없는 것을 알 수 있습니다. 그러나 File 's Owners 사용자 정의 클래스를 UIViewController로 설정하면 "보기"콘센트가 표시되며 CMND 만 콘센트를 CustomView에 연결할 수 있습니다.


대박. 정말 고맙습니다. 이 답변은 받아 들여야합니다!
로마

7

내 문제는 클래스 폴더에보기 설정이없는 중복 펜촉이있어서 발생했습니다. xcode는 빌드를 위해 하나의 펜촉을 선택하고 다음에 프로젝트를 빌드 할 때 다른 펜촉을 선택하는 것처럼 보였습니다. 다른 것을 삭제했습니다. 좋아 보인다 도!


6

펜촉에서 뷰 속성을 시작할 때 뷰 속성이 뷰 컨트롤러에 설정되지 않은 이유를 찾으려고 몇 시간 이상을 보냈습니다. 뷰 컨트롤러의 initWithNibName 내에서 "[super initWithNibName ...]"을 호출해야합니다.


5

방금이 문제를 해결했습니다. 큰 프로젝트, 두 개의 파일. 하나는 "ReallyLargeNameView"이고 다른 하나는 "ReallyLargeNameViewController"입니다.

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

그래서 비슷한 명명 된 클래스 (보기)를 삭제합니다. 곧 "내부 아울렛이 연결되지 않았습니다"라는 새로운 오류는 문자 그대로 "키 값이 아닌 웹뷰"입니다. 기본적으로 "Visual Studio가 더 좋습니다"라고 말합니다. 어쨌든 ... 작은 이름의 파일을 지우면 작동합니다.

XCode는 비슷한 이름의 파일들과 혼동됩니다. 그리고 프로젝트는 약간 재부팅해야 할만큼 충분히 크며, 그 일부일 수도 있습니다.

"XCode is confused"보다 더 기술적 인 답변을 원하지만 xCode는 현재 많은 혼란을 겪고 싶습니다. 내가 어린 아이를 도울 것과 같은 방식으로 혼란스럽지 않습니다. 그것은 지금 작동합니다 :) 위의 방법으로 문제가 해결되지 않으면 다른 사람들에게 도움이됩니다.

항상 시뮬레이터를 삭제하여 빌드를 청소해야합니다.


4

나는 또한 같은 문제가 있었고 내 문제는 다른 현지화 (영어)를 ViewControllers 펜촉에 추가하여 현지화 독일어가있는 내 앱이 현지화 영어로 펜촉을 찾을 수 없다는 것입니다 !! 이것이 누군가를 돕기를 바랍니다!


4

실수로 xib 참조를 삭제하고 다시 추가하는 동안 동일한 문제가 발생했습니다. 파일 소유자와보기를 연결하여 수정했습니다. 또한 FilesOwner의 사용자 정의 클래스가 예상 viewController인지 확인하십시오.


3

나에게 전화를 걸어 문제를 일으켰다 initWithNibName:bundle:. 나는 nib 파일의 테이블 뷰 셀을 사용하여 앉아있는 입력 양식을 정의하고 tableViews있습니다. 보기가 없기 때문에 하나에 연결하는 것이 합리적이지 않습니다. 대신 initWithStyle:메소드를 대신 호출하고 거기에서 nib 파일을로드하면 예상대로 작동합니다.


3

이전 답변 은 거의 문제를 해결했지만 마지막 단계는 없었습니다.

  1. 동일한 이름으로 xib 및 swift 파일을 작성하십시오.

뷰 및 스위프트 파일 추가

  1. 파일 소유자를 UIView 서브 클래스로 설정하십시오.

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

  1. 콘센트를 View에서 UIView 서브 클래스로 끌어서 이름을 "contentView"로 지정하십시오.

contentview를 추가하십시오

  1. xib가로드 될 때 contentView를 연결하도록이 사용자 정의 이니셜 라이저를 추가하십시오.

컨텐츠 뷰를 서브 뷰로 추가

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

이제 추가 한 @IBOutlets가 첨부됩니다.

건배, 리차드


2

나는 같은 문제가 있었지만 약간 다른 해결책이 필요했다. 이 경우 문제는보기의 클래스가 아니라 파일 소유자의 클래스였습니다. 이를 설정하기 위해 Interface Builder 창의 왼쪽 아래 모서리에있는 "역방향 재생"아이콘을 클릭해야했으며 파일 소유자, 첫 번째 응답자 및보기의 특성을 분리하는 옵션이 나타납니다. 첫 번째 상자 (큰 투명 상자)를 클릭하면 위에서 제안한대로 사용자 정의 클래스를 설정할 수 있습니다.


2

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


2

오늘 밤 Swift UIViewController 서브 클래스를 사용하여 매우 비슷한 것을 발견했습니다. 이 경우 위의 수정 사항 중 어느 것도 효과가 없었지만 내 코드의 순서를 약간 변경했습니다. 서브 클래스에 대한 확장명을 가진 Net-net은 같은 파일에서 서브 클래스의 정의 자체가 XCode를 혼동하는 것처럼 보이지만 잘 컴파일됩니다. 수정은 서브 클래스의 정의 뒤에 확장을 배치하는 것이 었습니다.

나는 이 비슷한 질문에 대한 답변에 세부 사항 게시했습니다 .


2

내 경우에는 지정된 초기화 프로그램 - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil *** ViewController 클래스 이 구현되었으므로 객체를 초기화하기 위해 다른 초기화 프로그램을 호출하더라도 지정된 초기화 프로그램이 호출됩니다.

따라서이 문제를 확인하는 - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil것이 올바른 방법입니다.


2

이 문제는 다른 답변과 약간 다른 방식으로 발생했습니다.

새 xib 파일을 만들고 Interface Builder에서 UIViewController를 추가하고 해당 UIViewController의 사용자 정의 클래스를 내 뷰 컨트롤러로 설정하면 "보기 콘센트가 설정되지 않았습니다"충돌이 발생합니다. 여기에있는 다른 솔루션은 뷰 콘센트를 View로 제어 드래그한다고 말하지만 뷰 콘센트가 회색으로 표시되어 제어 드래그 할 수 없었습니다.

회색으로 표시된보기 콘센트

인터페이스 빌더에 UIViewController를 추가하는 것이 실수라고 생각했습니다. 대신 UIView를 추가하고 파일 소유자의 사용자 정의 클래스를 내 뷰 컨트롤러로 설정해야했습니다. 그런 다음 파일 소유자의 뷰 콘센트를 새 뷰 UIView로 제어 드래그 할 수 있었고 모든 것이 제대로 작동했습니다.


1

내 프로젝트에서 동일한 오류가 있었지만 다른 이유가 있습니다. 제 경우에는 사용자 정의 UITableViewController 클래스에 이름이 "View"인 IBOutlet 설정이있었습니다. "view"가 기본 클래스의 멤버이기 때문에 특별하다는 것을 알았지 만 View (다른 경우)도 문제가 될 것이라고 생각하지 않았습니다. 코코아의 일부 영역은 대소 문자를 구분하지 않으며 xib를로드하는 것이 그 영역 중 하나 일 것입니다. 방금 DefaultView로 이름을 바꿨으며 이제는 모두 좋습니다.


1

파일 소유자를 선택하고 ID 관리자를 열어 해당 클래스 이름을 지정하십시오. 위의 방법 중 어느 것도 작동하지 않고 여전히 뷰 콘센트를 볼 수 없으면 새로운 참조 콘센트에 파일 소유자에 대한 연결을 제공하면 뷰 콘센트를 볼 수 있습니다. View Outlet을 클릭하여 View Outlet과 File 소유자를 연결하십시오. 응용 프로그램을 실행하면 정상적으로 작동합니다.


1

제 경우에는보기가 xib에서 보이지 않았습니다. xib에서보기는 크기 = 없음이었습니다 (오른쪽 네 번째 탭). 크기를 Freeform으로 설정하고 xCode를 다시로드하십시오. 보기에 호소했고보기에 ​​대한 적절한 링크를 설정했습니다.


1

모든 것을 시도했지만 여전히이 오류가 발생하면 클래스 파일을 처음부터 다시 작성해보십시오. "XIB 파일도 작성"확인란을 선택해야합니다. 이렇게하면 파일을 개별적으로 만들 때 연결되지 않은 몇 가지 항목이 자동으로 연결됩니다. 이것을 만든 후에는 모든 것을 잘라내어 새로운 XIB에 붙여 넣을 수 있으며 제대로 작동합니다.

Swift에서 파일을 별도로 생성 할 때 특히이 문제를 찾고 있습니다.


1

나를 위해, 언제 일어 났는가

  • Nib 파일과 관련된 ViewController 클래스 (.mm / h)가 있습니다.
  • 이 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가 누락되었습니다.이 줄을 추가하면 문제가 해결되었습니다.


1

저도 같은 문제가 없었다, 나는 파악하고 난 "똑딱 한의 때문이다 정적 세포 의 속성에서" 테이블보기 에서 내용 옵션 . " Dynamic Prototypes"( 으)로 변경되었을 때 작동했습니다 . 스크린 샷은 다음과 같습니다. 여기에 이미지 설명을 입력하십시오


1

Xcode 9.3에서도 비슷한 문제가 있었고 "File Owner 's"속성 관리자에서 "Module"을 프로젝트 모듈로 설정하면이 문제가 해결되었습니다.


1

viewController가있는 스토리 보드 파일 또는 textEdit.app있는 XIB 관련 파일을 열고 스토리 보드 또는 XIB 이름이 viewController와 동일한 지 확인한 다음 변경하고 Xcode를 저장하고 다시로드 / 다시 시작하십시오.


1

커스텀 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;
}

0

Stephen J를 두 번째로 만들고 싶습니다. X 코드가 혼란 스러울 때가 있습니다. 방금 UI를 많이 사용한 경험이 있었고 콘센트를 몇 번 추가하고 삭제했습니다. 콘센트는 더 이상 배선하지 않습니다. 나는 구체적인 이유를 찾지 못했습니다 (위의 모든 솔루션을 시도했지만) NIB를 삭제하고 처음부터 다시 작성해야했으며 실제로 작동하기 전에 NIB의 다른 이름을 사용해야했습니다. (XCode 4.6.1) 두 시간을 낭비했습니다.

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