2016-07-26 58 views
5

我正在製作一個應用程序,該應用程序利用了我創建的框架。如何檢查故事板是否存在於特定的NSBundle中

該框架包含故事板,但在某些情況下,使用框架的項目將需要通過提供新框架來覆蓋故事板。

所以我的目標是檢查一個給定名字的故事板是否存在於[NSBundle mainBundle],如果沒有,那麼我會從我的框架中獲得基礎版本。

我試圖從主包中獲取故事板並檢查結果是否爲零,但如果找不到則會引發異常。所以我然後試圖捕捉異常,然後從框架中加載故事板。這確實工作,但它感覺骯髒,它可以很好地擊中我的應用程序的性能。

我也試圖在束pathForResource

if([[NSBundle mainBundle] pathForResource:name ofType:@"storyboard"] != nil) { 

} 

但這從來沒有發現的故事板。

有誰知道任何其他方式,我可以檢查故事板是否存在於特定的包中?

+0

既然你不能寫入應用程序運行時包你應該確切地知道什麼是在編譯時束... – vadian

+0

的代碼在框架中。所以我不能從框架中知道它被嵌入到主包中的是什麼。 – Swinny89

+0

不知道它是否會有所幫助,但編譯的故事板的文件擴展名爲「storyboardc」。 –

回答

7

所以,我差不多在那裏,我已經在嘗試。根據對我的問題的評論,故事板的編譯擴展名是「storyboardc」。所以,我可以爲您在像這樣一個包是否存在一個故事板:

if([[NSBundle mainBundle] pathForResource:name ofType:@"storyboardc"] != nil) { 
    //The storyboard exists 
} else { 
    //The storyboard isn't in the bundle, get it from the framework bundle. 
} 
+1

因爲我們正在尋找編譯器故事板文件,所以'storyboardc'中的「c」很重要! –

+0

@MatthieuRiegler,@ Swinny89你知道'storyboardc'的使用是否是AppStore的拒絕原因嗎? – eMdOS

+0

它不是使用私有API,因此,不。 –

相關問題