使用资源包文件中的Storyboard

时间:2013-11-17 23:11:54

标签: ios storyboard bundle

我创建了一个包文件并将包文件导入到我的项目中。这个捆绑文件中有一个故事板,我想从这个故事板创建视图。我一直试图找出正确的方法来做这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"

2 个答案:

答案 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}

所以看起来您的捆绑包有问题(虽然我没有任何加载捆绑包的经验)。

如果您的对象是使用该包中包含的故事板和图像,您可以在查找程序中打开该包,单击“显示包内容”,然后将这两个文件拖到您的项目中。然后您不需要加载该包,它可以从项目中删除。