2012-01-23 31 views
0

我试图模态地呈现一个UINavigationControllerUITableViewController作为它的根视图,但保持按下按钮时呈现模态视图的应用程序崩溃。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:更改为init时,UITableViewController加载正常(我的.xib文件与类相同)。

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

当您将它添加到UINavigationController时,是否应该以这种方式初始化UITableViewController?到目前为止,我已经对文档进行了搜索。

在iOS中使用iOS 5,但目标部署为4.0。

回答

1

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

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

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

顺便说一句当我在开幕文章中误解了使用init时正确加载的笔尖文件。事实并非如此,UITableViewControllerapparently这种行为不会发生,其他类的名称与.xib文件相同的类将首先尝试加载.xib。

+0

这件事发生在我身上,很难追查到。你的评论为我节省了更多的时间! –

+0

你介意我问完全是哪一部分? – craigmarch

+0

在启用ARC的项目中,将故事板中的视图复制到.xib中导致应用程序崩溃。当我推送视图时,副本中的某些内容正在递减我的视图引用计数。 –

0

如果这是一个按钮,当按下按钮时不应该初始化任何东西。您应该事先进行初始化,并在按下按钮时仅显示modalViewController

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

+0

但是当然你不想初始化一个对象的方式,然后它可能永远不会被使用? – craigmarch