2013-07-18 91 views
1

我有下面的代码,将调用模态视图。呈现视图控制器,当我工作正常,但是当我关闭它,它崩溃iOS:dismissViewControllerAnimated执行后崩溃

_surveySummaryTableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
[_surveySummaryTableViewController setTableView:_surveySummaryTableView]; 

UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeModalView:)]; 
[[_surveySummaryTableViewController navigationItem] setRightBarButtonItem:doneItem]; 
[[_surveySummaryTableViewController navigationItem] setTitle:@"Response Summary"]; 

navController = [[UINavigationController alloc]initWithRootViewController:_surveySummaryTableViewController]; 
[navController setModalPresentationStyle:UIModalPresentationFormSheet]; 
[navController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 

.... 

[self presentViewController:navController animated:YES completion:nil]; 

点击的模式视图完成按钮将调用下面的closeModalView:方法:

- (void)closeModalView:(id)sender 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

怪异的一部分是,当我将下面的行注释掉时,解雇行为很好。但是原因是,没有任何TableView,视图将是空的。我可能错过了什么?我尝试了别人发布的其他建议,但没有运气。提前致谢。

_surveySummaryTableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
//[_surveySummaryTableViewController setTableView:_surveySummaryTableView]; //This line commented out 

UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeModalView:)]; 
[[_surveySummaryTableViewController navigationItem] setRightBarButtonItem:doneItem]; 
[[_surveySummaryTableViewController navigationItem] setTitle:@"Response Summary"]; 

===其他信息===

考虑它的工作原理,当上述被评论线,表实际上填充自定义UITableViewCell。这可能是一个问题吗?

+2

您需要从崩溃中发布完整的错误消息。 – rmaddy

+0

你在'UIViewController'中提出了一个'UINavigationController'?你可以,但这不是一个正常的做法。如果我是你,我将使用'UINavigationController'作为父项,然后在更改页面时推送'UIViewController'。 – Raptor

+0

@ShivanRaptor从vie控制器中呈现模态导航控制器没有任何问题。 – rmaddy

回答

1

我改变了属性类型从retainstrongsurveySummaryTableView

@property (strong, nonatomic) IBOutlet UITableView *surveySummaryTableView;

而且一定让孩子的看法是weak类型或unsafe_unretained

Thanks @JeslyVarghese & everyone!

0

由于您正在推导航控制器,因此您必须将其解雇。尝试:

[self.navigationController dismissViewControllerAnimated:YES completion:nil]; 

OR

[self.parentViewController.navigationController dismissViewControllerAnimated:YES completion:nil]; 
+0

不应该是一个问题:“呈现视图控制器负责解除其呈现的视图控制器,但如果您在呈现的视图控制器本身上调用此方法,它会自动将该消息转发给呈现视图控制器。 – Can

+0

第二个根本没有关闭navController。我猜''self.parentViewController.navigationController'为空。第一个执行,但它崩溃的方式与使用'[self dismissViewControllerAnimated:YES completion:nil];' – jason