2016-12-05 7 views
1

이 문제는 간단합니다. xib에서 다른보기 컨트롤러를로드하는보기 컨트롤러가 있습니다.xView를 통해 다른보기 컨트롤러를로드하는 UIViewController가 기본보기에 액세스하려고하면 충돌이 발생합니다.

'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "Embedded" nib but the view outlet was not set.' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010689134b __exceptionPreprocess + 171 

는이 모양을 수행하는 코드 : 그 차 뷰 컨트롤러의 뷰를 참조하려는 시도와 충돌

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // loads controller just fine. 

    EbeddedViewController *embedded = [[EbeddedViewController alloc] initWithNibName:@"Embedded" bundle:nil]; 

    // KABOOM on line below 
    UIView *embeddedViewIs = embedded.view; 

} 

EmbeddedViewController가있는 UIViewController를 확장하고 일반/평범한입니다 ..

#import "EbeddedViewController.h" 

@interface EbeddedViewController() 

@property (nonatomic, strong) IBOutlet UILabel *embeddedLabel; 

@end 

@implementation EbeddedViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

/* 
#pragma mark - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 
} 
*/ 

@end 

이 매우 지루하고 평범 :

enter image description here

그리고 이것이 기본보기입니다. IBOutlet을 추가하려고 시도했지만 none-the-less가 충돌합니다.

XIB보기 컨트롤러가 제대로 사용자 정의 클래스로 설정

enter image description here

이 충돌 왜이 작은 응용 프로그램을 시도하고자하는 경우 나 .. 단서가 없다

enter image description here

하십시오 여기에서 다운로드 :

Link to a tiny two view controller app where this crash is demonstrated

+0

viewDidAppear 메서드에서 뷰에 액세스하려고합니다. 콘센트는 viewDidLoad 메서드에서 아직 설정되지 않았습니다. –

+0

감사합니다. 나는 핵심 코드 조각을 넣으려고 했었습니다 - xb의로드가 viewdid에 나타나고 크래시가 똑같은 방식으로 일어났습니다 - 똑같은 일입니다. 그런 다음 나는 그것들을 나누기로 결정했습니다 - xd의로드를 viewdidload에 두었고 viewdidappear에서 뷰에 액세스했습니다. 그리고 똑같은 방식으로 충돌했습니다 ... – geekyaleks

답변

2
  1. xib를 사용하여 컨트롤러의 뷰를 만들고 싶다면 컨트롤러를 InterfaceBuilder에 추가하지 말고 뷰를 추가하면됩니다.
  2. 이미지에서 볼 수 있듯이보기로 파일의 소유자로부터 끌어 제어에 의해 새로 생성 된 뷰 파일의 소유자의보기 콘센트를 연결합니다 (EmbeddedViewController를) 파일의 소유자를 선택하고 사용자 정의 클래스를 설정

enter image description here

+0

고마워요, 지금 당장 그것을 시도 할 것입니다. – geekyaleks

+0

정말 잘 했어요. 고마워요. – geekyaleks