我创建了一个包文件并将包文件导入到我的项目中。这个捆绑文件中有一个故事板,我想从这个故事板创建视图。我一直试图找出正确的方法来做这2天,但没有运气。它始终显示“'无法在捆绑NSBundle中找到名为'StoryboardA'的故事板”错误。我在这里有一个示例项目:https://github.com/tsunglintsai/Storyboard-In-Resource-Bundle。
以下是我试过的代码。
NSBundle *resourceBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"bundlefilename" ofType:@"bundle"]];
[resourceBundle load];
NSLog(@"resourceBundle:%@",resourceBundle);
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"StoryboardA" bundle:resourceBundle];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
- 我无法从以下类似的问题帖子中找到答案:
How to load storyboard file from custom bundle in IOS app?
Xcode Copy Bundle Resources can't find files
"Could not find a storyboard named 'MainStoryboard' in bundle NSBundle"
答案 0 :(得分:6)
您需要创建一个合适的捆绑包,而不只是重命名一个.bundle
扩展名的目录。
故事板等资源需要位于Contents/Resources/
子目录中,并且Info.plist
目录中还需要Contents/
。
您可以通过创建新目标并从 OS X>中选择 Bundle 来生成基本模板。框架&文库。然后将其存档并查看存档。
使用目标依赖项可能有一种更简化的方式,但是对于我来说,如何使Xcode使用普通的构建命令构建捆绑包并不明显,它似乎只能用于归档。
有关详细信息,请参阅Apple的捆绑编程指南中的Loadable Bundles。
答案 1 :(得分:-1)
如果您使用loadAndReturnError:
而非load
,则会收到以下错误消息:
错误域= NSCocoaErrorDomain代码= 4“捆绑包 无法加载“bundlefilename.bundle”,因为它的可执行文件 无法定位。“UserInfo = 0xb8c8720 {NSLocalizedRecoverySuggestion =尝试重新安装捆绑包。, NSLocalizedFailureReason =无法找到软件包的可执行文件。, NSLocalizedDescription =捆绑“bundlefilename.bundle”不可能 因为无法找到其可执行文件而加载。 NSBundlePath = / Users / user1 / Library / Application Support / iPhone 模拟器/ 7.0.3 /应用/ 2952FC15-F092-4F04-9BD3-902A923BC692 / StoryboardInBundle.app / bundlefilename.bundle}
所以看起来您的捆绑包有问题(虽然我没有任何加载捆绑包的经验)。
如果您的对象是使用该包中包含的故事板和图像,您可以在查找程序中打开该包,单击“显示包内容”,然后将这两个文件拖到您的项目中。然后您不需要加载该包,它可以从项目中删除。