2013-06-26 56 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的,

iPhone 5之一:XViewController_568.xib

iPhone 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。

然而,Xcode中出現了錯誤:由於未捕獲的異常 'NSInternalInconsistencyException'

終止應用程序, 原因: '不能在包中加載NIB:' 一個NSBundle /用戶/ SamGuichelaar /庫/應用程序支持/ iPhone模擬器/ 6.1 /應用/ 321B4512-7BD3-46D8-A944-F12029448326 /大路驅動Gestures.app(加載) '名爲'(空)_568' 第一擲調用堆棧:

所以,不順心的事變得無法找到iPhone 4 Xib的原始名稱。

任何人都可以幫助我嗎?

+1

這是一個從你的異常信息清楚地表明你的initWithNibName:包:方法被調用無參數 - 因此,「(空)_568」 –

+0

但是它適用於其他項目完美。任何想法如何解決這個問題? –

+0

我想你在其他項目中手動調用該方法?這裏怎麼樣,你在哪裏以及如何實例化這個視圖控制器? –

回答

3

我建議檢查nibName是否爲零,如果是的話,使用類名稱。

我喜歡使用?:進行這種快速替換。

- (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

謝謝,這爲我修好了。 :) –