2011-11-18 88 views
0

我想在運行時基於某些條件從子文件夾加載NiB文件。問題是,當我調用方法pathForResource時,代碼能夠找到NIB文件,但是當我運行應用程序時,我總是得到以下錯誤如何從不同文件夾加載nib文件?

由於未捕獲的異常'NSInternalInconsistencyException',原因:'Could not在包中加載NIB:「一個NSBundle

這裏是我的代碼:

// The designated initializer. Override to perform setup that is required before the view is loaded. 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 

if(somecondition == true) 
{   
    NSString* nibPath = [[NSBundle mainBundle] pathForResource:nibNameOrNil ofType:@"xib" inDirectory:@"CAS"]; 
    NSString* customPath = [nibPath stringByDeletingLastPathComponent]; 

    NSBundle* localeBundle = [NSBundle bundleWithPath:customPath]; 

    if (localeBundle!= nil) { 
     nibBundleOrNil = localeBundle; 
    } 
} 

} 


if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 

} 

return self; 
} 
+0

這是[NSBundle MainBundle];我想你對Xcode中所謂的「文件夾」的結構感到困惑。當Xcode創建一個文件夾時,它只是編輯項目的XML,將這些文件包含在僞文件夾包中。它永遠不會寫入文件系統。 – CodaFi

+0

那麼如果沒有'文件夾',那麼'inDirectory'字段使用了什麼? – ArdenDev

+0

它應該暗示你引用了你的包中的文件,比如NSHomeDirectory或者NSDocumentsDirectory。 – CodaFi

回答

1

你的NIB/XIB應包括在你的Xcode項目。他們應該在同一個文件夾中。您只能加載導入到您項目的NIB/XIB。

+0

我已經使用文件系統中的文件組織了我的xcode項目,並且一些XIB在子文件夾中,我也將它們添加到了我的xcode項目中。 – ArdenDev

+0

在您的xCode項目中,即使XIB處於「組」(xCode文件資源管理器中的類文件夾圖標)中,它們也被視爲相同級別的根。只需調用XIB名稱來加載文件。 – Raptor