2013-11-28 369 views
4

我正在研究故事板加載系統,我需要檢查是否存在特定的故事板。動態加載故事板

我做了一個函數檢查它(給出了具體的故事板名稱):

(NSString *)ressourceNameForDevice:(NSString *)rootName extension:(NSString *)ext 
{ 
    NSString *retString = rootName; 
    NSString *iPadString = [NSString stringWithFormat:@"%@-iPad", rootName]; 
    NSString *iPhoneWideString = [NSString stringWithFormat:@"%@-wide", rootName]; 

    if (IS_IPAD && 
     (nil != [[NSBundle mainBundle] pathForResource:iPadString ofType:ext])) 
    { 
     retString = iPadString; 
    } 

    if (IS_IPHONE_WIDE && 
     (nil != [[NSBundle mainBundle] pathForResource:iPhoneWideString ofType:ext])) 
    { 
     retString = iPhoneWideString; 
    } 

    return retString; 
} 

我打電話與@"storyboard"此功能擴展參數。

我probleme是功能上nil != [[NSBundle mainBundle] pathForResource:iPhoneWideString ofType:ext]失敗,即使故事板IS出現在我的項目和捆綁,它不會發現。我想我應該給它另一個延伸,我也試過@"nib",但沒有更多的結果。

任何人都知道如何檢查?

+0

那麼怎麼樣:'[UIStoryboard storyboardWithName:@「xxx」bundle:nil]'? – Larme

+0

我寫的方法被調用來填充此函數的'@「xxx」'部分,因爲_Hello.storyboard_有一個_Hello-wide.storyboard_和_Hello-iPad.storyboard_ – shinyuX

回答

6

解決了它。問題是,一旦storyBoard編譯完成,資源擴展不是.storyboard,而是.storyboardc,與.xib編譯文件擴展名爲.nib的方式相同。

-1

假設你的項目中有「xyz.storyboard」被加載。然後寫爲:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"xyz" 
                  bundle: nil]; 

它應該做的必要。

+0

感謝您的答案。事實是,我已經使用這種方法,但我的問題來自於我有'xyz.storyboard','xyz-wide.storyboard'和'xyz-iPad.storyboard'這個事實。我寫的方法檢查設備類型,如果在iPhone上有'xyz.storyboard'的實際存在,如果在iPhone 4上是'xyz-wide.storyboard',如果在iPad上是'xyz-iPad.storyboard'。在加載之前,我只需要知道如何驗證storyBoard的存在。 – shinyuX

+0

如果您嘗試通過傳遞「xyz-wide」作爲參數來加載xyz-wide.storyboard並獲取nil,則表示故事板不存在。 – Jailbroken

+0

我明白了,但我想在嘗試加載之前檢查它。 – shinyuX