【问题标题】:How to check if a Storyboard exists in a specific NSBundle如何检查 Storyboard 是否存在于特定的 NSBundle 中
【发布时间】:2023-03-11 12:17:01
【问题描述】:

我正在制作一个使用我正在创建的框架的应用程序。

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

所以我的目标是检查[NSBundle mainBundle] 中是否存在具有给定名称的故事板,如果不存在,那么我将从我的框架中获取基本版本。

我尝试从主包中获取故事板并检查结果是否为零,但如果找不到它会引发异常。所以我然后尝试捕获异常,然后从框架中加载情节提要。这确实有效,但感觉很脏,很可能会影响我的应用程序的性能。

我也尝试过捆绑包中的pathForResource

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

}

但这永远找不到情节提要。

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

【问题讨论】:

  • 由于您无法在运行时写入应用程序包,因此您应该在编译时确切知道包中的内容...
  • 代码在框架中。所以我无法从框架中看出它被嵌入到主包中的内容..
  • 不知道是否有帮助,但编译后的故事板的文件扩展名为“storyboardc”。

标签: ios objective-c xcode storyboard nsbundle


【解决方案1】:

所以,我已经完成了尝试。根据对我的问题的评论,情节提要的编译扩展名是“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.
}

【讨论】:

  • storyboardc 中的“c”很重要,因为我们正在寻找编译器故事板文件!
  • @MatthieuRiegler, @Swinny89 你知道storyboardc 的使用是否是AppStore 的拒绝原因吗?
  • 它不是使用私有 API 所以,不。
  • pathForResource:name ofType:@"storyboardc 在设备上不起作用,我不得不重新提交应用程序。不要使用它。
  • 请问您能提供更多信息吗?我用这个是在设备上运行很长时间的应用程序,从来没有遇到过任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
相关资源
最近更新 更多