我正在尝试制作一个将故事板捆绑在一起的框架。我已经检查过,并且创建的.framework包括我的.storyboard文件(作为.storyboardc文件),并且已经获得了在运行时加载情节提要的框架。但是,这是一个框架,我希望代码尽可能多才多艺,而且我觉得我当前的解决方案有些拙劣。目前,我正在使用以下代码加载情节提要:
.storyboardc
let mainBundlePath: String = NSBundle.mainBundle().resourcePath let frameworkBundlePath = mainBundlePath.stringByAppendingPathComponent("Frameworks/AuthenticationManager.framework") let frameworkBundle = NSBundle(path: frameworkBundlePath) let storyboard = UIStoryboard(name: "Storyboard", bundle: frameworkBundle)
我注意到的几件事可能是陷阱:
Frameworks/
NSBundle
可能还有其他问题,上述问题的解决方案,或者上述问题可能毕竟不是问题,但我一直没有想到。
这个问题可能更适合于Code Review,但是我觉得在这里也很合适。如果需要将其移至该处,请随意执行此操作或告诉我执行此操作。
这是一个更干净的解决方案(不涉及框架标识符):
let storyboardName = "StoryboardName" let storyboardBundle = NSBundle(forClass: self) let storyboard = UIStoryboard(name: storyboardName, bundle: storyboardBundle)
如果此代码不在static方法内部,请使用YourClass.self代替self。
static
YourClass.self
self
Swift 3的示例
let storyboardBundle = Bundle(for: NumberPadViewController.self) super.init(nibName: "NumberPadViewController", bundle: storyboardBundle)