Initwithnibname:bundle: 无法从资源包中加载带有 2 个视图控制器的 xib

Posted

技术标签:

【中文标题】Initwithnibname:bundle: 无法从资源包中加载带有 2 个视图控制器的 xib【英文标题】:Initwithnibname:bundle: can't load xib with 2 view controllers from a resource bundle 【发布时间】:2014-10-20 21:27:13 【问题描述】:

问题的后半部分可能无关紧要;但我从已放入资源包的 xib 加载 2 个视图控制器时遇到问题。

这些是我采取的步骤:

1) 创建一个新的目标,类型为 bundle。在复制资源包中,我为这个包添加了我想要的 xib。

2)在我的主应用程序目标中添加此捆绑包作为目标依赖项,以便它将使用 xib 构建捆绑包

3)在我的 Products 组中,出现了捆绑包,我将此引用拖到了我的主应用目标的构建阶段的 Copy Bundle Resources 中。

4)我运行并构建,并尝试在我的窗口控制器中加载笔尖

self.accountController = [myAccountController initWithAccount:account];
//At this point, accountController is initialized correctly, 
//but neither of the view controllers are initialized;
//so this view is nil.  see below for more info
NSView* myView = self.accountController.myViewController1.view;

// 这是 accountController 的实现:

//This method is custom, because I need some arguments in my init
-(instancetype) initWithAccount:(myAccount*)account

   self = [super initWithNibName:myNibName bundle:[self resourceBundle]
   if(self)
   
      self.account = account;
   
   return self;


+(NSBundle*) resourceBundle

   NSURL* bundleURL = [[NSBundle mainBundle] URLForResource:myBundleName withExtension:@"bundle"];
   NSBundle* bundle = [NSBundle bundleWithURL:bundleURL];

   NSError* error = nil;
   [bundle loadAndReturnError:&error];
   NSLog(@"%@", error);

   return bundle;

返回的包是正确的,它指向正确的位置,并且所有的名称都是正确的。但是在initWithNibName:bundle: 调用之后,self 没有我在 nib 中定义的 2 个视图控制器。

我想说这与 initwithnibname 实际上并没有加载包含视图控制器的 nib 的事实有关吗?但我的理解是不稳定的,苹果笔尖文档并没有真正到达我的手中。我也可能在我的 xib 中错误地创建了我的 VC...

谁能帮我把这个拼出来?我基本上整天都在努力解决这个问题。提前致谢!

【问题讨论】:

【参考方案1】:

我确信有更好的解决方案,但我的最终只是访问基本视图控制器的 view 属性,然后它会去加载在 xib 中声明的视图控制器

【讨论】:

以上是关于Initwithnibname:bundle: 无法从资源包中加载带有 2 个视图控制器的 xib的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候需要调用 -[UIViewController initWithNibName:bundle:]?

Initwithnibname:bundle: 无法从资源包中加载带有 2 个视图控制器的 xib

View加载过程

iOS 9 中未调用 awakeFromNib

swift 中,viewcontroll如果跳转到tabBar页面,我是有一个返回首页的按钮,首页就是登录页面之的页面

awakeFromNib 没有调用但显示 xib