故事板中的initWithNibName方法

Bob*_*nes 11 xcode facebook storyboard

我正在按照Facebook的教程发布到用户的墙上:http://developers.facebook.com/docs/howtos/publish-to-feed-ios-sdk/ 虽然它是以.xib项目为基础制作的,但我到目前为止,我的故事板项目能够做得很好.但是,我已经到了需要将一些代码放入initWithNibName:bundle:方法的地步,但我不能这样做,因为我使用的是storyboard.并且,由于很难判断何时调用该方法,我不能只编写名为initWithNibName的方法:bundle:并从其他方法调用它.如果有人知道如何解决我的问题,请说出来.谢谢.

Kit*_*une 39

我自己也遇到了这个问题.故事板似乎不使用initWithNibName:bundle:,但是initWithCoder:(NSCoder *)aDecoder或者initWithStyle:(UITableViewStyle)style.

这两种方法的默认实现如下:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我自己还没有使用initWithStyle版本,但我想它会被称为UITableViewController.如果有疑问,您可以简单地将两种方法添加到文件中,同时将NSLog()调用打印出方法的名称(或任何其他唯一字符串).然后,您可以在模拟器中运行它以查看哪个被调用,并删除另一个.

我强烈建议不要用initWithNibName:bundle:任何其他init方法来称呼自己.最好只是将代码移动到正确的方法.

  • @Odelya我不确定这笔交易是什么(这绝对令人困惑).看起来像是一个疏忽,至少让他们离开默认模板(特别是因为鼓励使用Storyboard).我没有找到任何官方解释,虽然Apple的`initWithNibName:bundle:`的文档说在处理Storyboard时使用`initWithCoder:`方法.http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/initWithNibName:bundle: (7认同)
  • 如果storyboard不使用initWithNib - 为什么在使用xcode 4.5和storyboard添加新类时默认创建它? (2认同)