2013-06-26 3 views
0

사용자가 iPhone 5 화면에 있는지 여부를 확인하기 위해 앱을 검색하려고합니다.iPhone 5에 다른 xib로드 실패

다른보기에서 다음 방법을 사용하고 있습니다. 내가 XIB /보기

- (IBAction)DemoTapeTwo:(id)sender { 

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    DemoTapeTwoViewController *Second = [[DemoTapeTwoViewController alloc] initWithNibName:nil bundle:nil]; 
    [self presentViewController:Second animated:YES completion:NULL]; 

} else { 
    DemoTapeTwoViewController *Second = [[DemoTapeTwoViewController alloc] initWithNibName:@"DemoTapeTwoViewController_iPad" bundle:nil]; 
    [self presentViewController:Second animated:YES completion:NULL]; 


} 

를로드 할 호출 버튼을 통해

나는 두 개의 XIB의,

아이폰 5 하나 있습니다 XViewController_568.xib

아이폰 4 하나 XViewController.xib를

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { 
if ([[ UIScreen mainScreen ] bounds ].size.height == 568) { 
    nibName = [NSString stringWithFormat:@"%@_568", nibName]; 
} 
if (self = [super initWithNibName:nibName bundle:nibBundle]) { 

} 
return self; 
} 

이 파일은 .m 파일에 있습니다.

화면이 iPhone 5 또는 iPhone 4 화면인지 확인하고 Xib를 조정해야합니다.

그러나, 엑스 코드 오류 아웃 :

응용 프로그램을 종료로 인해 캐치되지 않는 예외 'NSInternalInconsistencyException'에가, 이유는 '번들에 NIB를로드 할 수 없습니다 :'NSBundle/사용자/SamGuichelaar/라이브러리/응용 프로그램 지원/아이폰 시뮬레이터/6.1/응용 프로그램/321B4512-7BD3-46D8-A944-F12029448326/'이름'파크 웨이 드라이브 Gestures.app (로드) (널) _568 '' 먼저 던져 호출 스택 :

그래서 뭔가 잘못은 아니 만들기 iPhone 4 Xib의 원래 이름을 찾습니다.

아무도 도와 줄 수 있습니까?

+1

그것은 당신의 예외 메시지에서 분명 당신의 initWithNibName : 번들 : 방법이 전무 인수로 호출되고 - 따라서 "(널) _568" –

+0

는 그러나 완벽하게 다른 프로젝트에서 작동합니다. 이 문제를 어떻게 해결할 수 있습니까? –

+0

다른 프로젝트에서 수동으로 메서드를 호출하는 것 같습니까? 여기서,이 뷰 컨트롤러를 어디에서 어떻게 인스턴스화합니까? –

답변

3

nibName이 nil인지 확인하고 클래스 이름을 사용하는 경우 확인하는 것이 좋습니다.

이 빠른 대체를 위해 ?:을 사용하고 싶습니다.


- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { 
    if ([[ UIScreen mainScreen ] bounds ].size.height == 568) { 
     nibName = [NSString stringWithFormat:@"%@_568", nibName ?: @"DemoTapeTwoViewController"]; 
    } 

    if (self = [super initWithNibName:nibName bundle:nibBundle]) { 

    } 
    return self; 
} 

는 더 일반적인, NSStringFromClass()를 사용하도록합니다.

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { 
    if ([[ UIScreen mainScreen ] bounds ].size.height == 568) { 
     nibName = [NSString stringWithFormat:@"%@_568", nibName ?: NSStringFromClass([self class])]; 
    } 

    if (self = [super initWithNibName:nibName bundle:nibBundle]) { 

    } 
    return self; 
} 
+0

고마워, 이건 나를 위해 해결. :) –

관련 문제