如何检查故事板是否存在于特定的NSBundle中

问题描述:

我正在制作一个应用程序,该应用程序利用了我创建的框架。如何检查故事板是否存在于特定的NSBundle中

该框架包含故事板,但在某些情况下,使用框架的项目将需要通过提供新框架来覆盖故事板。

所以我的目标是检查一个给定名字的故事板是否存在于[NSBundle mainBundle],如果没有,那么我会从我的框架中获得基础版本。

我试图从主包中获取故事板并检查结果是否为零,但如果找不到则会引发异常。所以我然后试图捕捉异常,然后从框架中加载故事板。这确实工作,但它感觉肮脏,它可以很好地击中我的应用程序的性能。

我也试图在束pathForResource

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

} 

但这从来没有发现的故事板。

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

+0

既然你不能写入应用程序运行时包你应该确切地知道什么是在编译时束... – vadian

+0

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

+0

不知道它是否会有所帮助,但编译的故事板的文件扩展名为“storyboardc”。 –

所以,我差不多在那里,我已经在尝试。根据对我的问题的评论,故事板的编译扩展名是“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,因此,不。 –