Objective-C:如何修改代码从Pod中加载Storyboard视图控制器?
从Pod中加载Storyboard视图控制器的解决方案
嘿,这个场景我太熟悉了!你当前的代码用bundle:nil会默认指向主App的Bundle,但Pod里的Storyboard资源是存放在Pod自己的独立Bundle里的,所以得调整Bundle的获取方式才行。下面是具体的修改步骤:
第一步:获取Pod对应的Bundle
有两种可靠的方式获取Pod的Bundle:
- 通过Pod内的类获取(推荐):
这种方式不需要硬编码Bundle名称,兼容性更强。只要用Pod里任意一个类来定位Bundle即可,比如你的Pod里有个叫PodBaseClass的类:NSBundle *podBundle = [NSBundle bundleForClass:[PodBaseClass class]]; - 通过Bundle名称获取:
如果明确知道Pod的Bundle名称(一般是你的Pod名称.bundle),也可以直接通过路径获取:NSBundle *podBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"YourPodName" ofType:@"bundle"]];
第二步:修改原有加载代码
把原来的bundle:nil替换成刚才获取到的Pod Bundle即可:
// 先获取Pod的Bundle NSBundle *podBundle = [NSBundle bundleForClass:[PodBaseClass class]]; // 替换为你Pod中的实际类 // 加载Pod内的Storyboard UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"StoryboardName" bundle:podBundle]; NewViewController *newView = [storyboard instantiateViewControllerWithIdentifier:@"NewViewController"]; [self.navigationController pushViewController:newView animated:YES];
额外注意事项
- 确保Pod的
podspec文件已经正确配置了资源,把Storyboard加入到resource_bundles中(这是Pod资源管理的标准方式),示例配置如下:s.resource_bundles = { 'YourPodName' => ['YourPod/Resources/**/*.storyboard'] } - 仔细核对Storyboard的名称和视图控制器的Identifier,拼写错误是最常见的翻车原因哦!
内容的提问来源于stack exchange,提问作者MVZ
相关产品推荐
相关产品推荐

