子 Viewcontroller 中的 UITableView 委托
UITableView Delegate in Sub Viewcontroller
我有一个 UIViewController
调用 Parent,我在 Parent 中有一个 UIView
子视图。我想添加两个不同的可能 UIViewControllers
之一,称为 A 和 B,作为 Parent[ 的子视图=41=]。 A 是 UIViewController
和 UITableView
。我将A中UITableView
的datasource
和delegate
设置为A。
然后我可以 "successfully" 添加 A 到 Parent,设置 A[= 的数据41=]如下:
AViewController *vc = (AViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"A"];
NSMutableArray *data = [@[@"foo",@"bar",@"baz"] mutableCopy];
vc.posts = data;
[self.container addSubview:vc.view];
我所说的成功是指我在表格视图的单元格中看到了正确的数据。即 foo、bar 和 baz 作为行。
我的问题: 当我尝试滚动表格视图时,它崩溃了。当我尝试 select 一个单元格时,出现以下异常:
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[_UIAppearanceCustomizableClassInfo
tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0x78c64430'
因为 AViewController
是在上面的代码中本地声明的,所以它会在该代码完成后立即被释放。因此,当您触摸 scrolling/selection 并调用 delegate/datasource 方法时,delegate
和 datasource
指向一个完全不同的对象(或 none )。因此你的崩溃。
此外,在实现客户容器视图时,您需要实现一些代码,以便父子都知道。看看 Apple Docs 中的 "Implementing a Custom Container View Controller":
[self addChildViewController:vc];
[self.container addSubview:vc.view];
[vc didMoveToParentViewController:self];
我相信 addChildViewController
也会提供从父对象到子对象 (vc
) 的强引用,从而防止它被释放。所以上面的代码应该也解决了释放问题。
我有一个 UIViewController
调用 Parent,我在 Parent 中有一个 UIView
子视图。我想添加两个不同的可能 UIViewControllers
之一,称为 A 和 B,作为 Parent[ 的子视图=41=]。 A 是 UIViewController
和 UITableView
。我将A中UITableView
的datasource
和delegate
设置为A。
然后我可以 "successfully" 添加 A 到 Parent,设置 A[= 的数据41=]如下:
AViewController *vc = (AViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"A"];
NSMutableArray *data = [@[@"foo",@"bar",@"baz"] mutableCopy];
vc.posts = data;
[self.container addSubview:vc.view];
我所说的成功是指我在表格视图的单元格中看到了正确的数据。即 foo、bar 和 baz 作为行。
我的问题: 当我尝试滚动表格视图时,它崩溃了。当我尝试 select 一个单元格时,出现以下异常:
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[_UIAppearanceCustomizableClassInfo
tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0x78c64430'
因为 AViewController
是在上面的代码中本地声明的,所以它会在该代码完成后立即被释放。因此,当您触摸 scrolling/selection 并调用 delegate/datasource 方法时,delegate
和 datasource
指向一个完全不同的对象(或 none )。因此你的崩溃。
此外,在实现客户容器视图时,您需要实现一些代码,以便父子都知道。看看 Apple Docs 中的 "Implementing a Custom Container View Controller":
[self addChildViewController:vc];
[self.container addSubview:vc.view];
[vc didMoveToParentViewController:self];
我相信 addChildViewController
也会提供从父对象到子对象 (vc
) 的强引用,从而防止它被释放。所以上面的代码应该也解决了释放问题。