UITableViewController初始化两次

时间:2012-01-23 14:06:40

标签: ios initialization automatic-ref-counting

我试图以UINavigationController模式显示UITableViewController作为根视图,但在按下按钮以显示模态视图时仍然会崩溃应用程序。

- (IBAction)flipToDefaultsViewController:(id)sender
{

    RootTableViewController *controller = [[RootTableViewController alloc] initWithNibName:@"RootTableViewController" bundle:nil];

    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:controller];
    nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

    [self presentModalViewController:nc animated:YES];
}

应用程序崩溃并显示以下消息:

  

[RootTableViewController numberOfSectionsInTableView:]:发送到解除分配的实例0x5677b5的消息

当我加载工具以进一步查看时,很明显我创建了UITableViewController的两个实例,一个是UINavigationController的所有者,另一个是UIKit。 UIKit创建的实例是被解除分配并导致崩溃的实例。

当我将初始化从initWithNibName:bundle:更改为initUITableViewController加载了罚款(我的.xib文件与该名称相同)。

我的问题是为什么会发生这种情况?

在将其添加到UINavigationController时,是否应该以这种方式初始化UITableViewController?到目前为止,我对文档进行了一次搜索,没有任何乐趣。

将iOS 5与ARC配合使用,但目标部署为4.0。

2 个答案:

答案 0 :(得分:1)

我还没有弄清楚为什么对象被初始化了两次,但是我确实检查了我用来创建 .xib 文件的步骤,看起来复制时有问题从Storyboard查看到Interface Builder。事后看来这是有道理的,但是由于视图似乎没有错误地复制而且其他一切看起来都很好看,所以很容易完成。

others results似乎遇到类似的问题。

通过使用nib文件(UITableViewController)创建一个完全干净的⌘-N子类,并将初始类中的代码复制到新类中,我可以使用上面的初始代码来分配/初始化我的模态视图。

顺便说一句,在我的开篇文章中,我在使用init时正确加载了nib文件时出错了。事实并非如此,UITableViewController apparently不会发生这种情况,因为其他具有与.xib文件相同的类名的类将首先尝试加载.xib。

答案 1 :(得分:0)

如果这是一个按钮,则按下按钮时不应初始化任何内容。您应该事先初始化,并在按下按钮时简单地显示modalViewController

是否有任何理由无法在appdelegate rootViewController方法中初始化didFinishLaunchingWithOptions和导航控制器?