Sub Viewcontroller中的UITableView委托

时间:2015-02-14 23:54:31

标签: ios objective-c uitableview uiviewcontroller

我有一个UIViewController来电家长,我在家长中有一个UIView子视图。我想添加两个不同的可能UIViewControllers中的一个,称为 A B ,作为的子视图。 A UIViewControllerUITableView。我将 A datasource的{​​{1}}和delegate设置为 A

然后我可以成功地#34;将 A 添加到,设置 A 的数据,如下所示:

UITableView

通过成功,我的意思是我在桌面视图中看到了正确的数据。即foo,bar和baz为行。

我的问题:当我尝试滚动tableview时,它会崩溃。当我尝试选择一个单元格时,我得到以下异常:

    AViewController *vc = (AViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"A"];
    NSMutableArray *data = [@[@"foo",@"bar",@"baz"] mutableCopy];
    vc.posts = data;
    [self.container addSubview:vc.view];

1 个答案:

答案 0 :(得分:2)

因为AViewController是在上面的代码中本地声明的,所以一旦代码完成就会释放它。因此,当您触摸滚动/选择并调用委托/数据源方法时,delegatedatasource指向完全不同的对象(或根本没有)。因此你的崩溃。

此外,在实现客户容器视图时,您需要实现一些代码,以便父母和孩子都知道。请参阅Apple Docs

中的“实现自定义容器视图控制器”
    [self addChildViewController:vc];
    [self.container addSubview:vc.view];
    [vc didMoveToParentViewController:self];

我相信addChildViewController也会提供从父级到子级(vc)的强引用,从而防止它被释放。所以上面的代码也应该解决释放问题。