我有一个UIViewController
来电家长,我在家长中有一个UIView
子视图。我想添加两个不同的可能UIViewControllers
中的一个,称为 A 和 B ,作为父的子视图。 A 是UIViewController
,UITableView
。我将 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];
答案 0 :(得分:2)
因为AViewController
是在上面的代码中本地声明的,所以一旦代码完成就会释放它。因此,当您触摸滚动/选择并调用委托/数据源方法时,delegate
和datasource
指向完全不同的对象(或根本没有)。因此你的崩溃。
此外,在实现客户容器视图时,您需要实现一些代码,以便父母和孩子都知道。请参阅Apple Docs:
中的“实现自定义容器视图控制器” [self addChildViewController:vc];
[self.container addSubview:vc.view];
[vc didMoveToParentViewController:self];
我相信addChildViewController
也会提供从父级到子级(vc
)的强引用,从而防止它被释放。所以上面的代码也应该解决释放问题。