UITableViewController子类实现UIDataSourceModelAssociation协议,但从不调用其方法

jim*_*buk 7 datasource uitableview ios state-restoration

我的应用程序使用Stanford课程的CoreDataTableViewController,它是UITableViewController的子类.

对于我的应用程序的特定视图,我创建CoreDataTableViewController的子类来管理特定视图.

我刚刚在我的大多数应用程序中连接状态编码和恢复,这一切似乎都正常工作.我唯一留下的就是实现UIDataSourceModelAssociation协议,据称保留UITableViews的可见和选定行(我也希望它可以保留表视图的编辑状态,如果我选择了它,则保留特定行的编辑状态删除,但尚未确认).

我在CoreDataTableViewController中实现了UIDataSourceModelAssociation,希望它能够适用于我的所有视图,但是在调试它时该功能不起作用,并且添加断点我发现当我将我的应用程序放入时,两个UIDataSourceModelAssociation方法都没有被调用使用主页按钮的背景,或通过在XCode中重新运行来恢复它.

CoreDataTableViewController及其子类实现了一些dataSource方法,以实际显示表视图中的行.我四处搜索,发现UITableViewController自动将自己添加为tableView的dataSource.

我在表单的子类viewDidLoad函数中添加了sanity asserts

assert(self.tableView);
assert(self.tableView.dataSource == self); <--- fails here
Run Code Online (Sandbox Code Playgroud)

在检查dataSource是我们自己时失败了.我可以通过记录和使用调试器来看到此时dataSource是非零的.

我想我只是想知道当我们对一个类进行子类化时,每个类是否共享相同的自身值,或者是因为我的UITableViewController将自己设置为dataSource,但是当我将它子类化为两次时,我的特定视图实例它的self与父UITableViewController略有不同.或者是其他东西拦截dataSource并根据需要转发.作为修复,我应该考虑将自己的子类硬编码为self,或者让CoreDataTableViewController将其自身添加为dataSource,因为这是实现UIDataSourceModelAssociation方法的地方.

作为参考我的视图层次结构包含我的UITableViewController子视图生活在NavigationControllers中,我听说可能会导致问题.

稍微清楚一下子类应如何在各类的自指针方面起作用,并想知道是否有人能够弄清楚为什么我的协议方法没有被调用会非常感激.

干杯

jim*_*buk 2

我仍然不确定为什么我的 tableViewController 的 dataSource 没有直接设置为 self。但显然我的 dataSource 方法被称为我的 tableView 函数。显然,某种对象正在将 dataSource 方法转发到我的实际类......

最后,调用 UIDataSourceModelAssociation 协议方法就像确保 UITableViewController 和其中的 UITableView 都有恢复 id 一样简单。只有外部 UITableViewController 具有恢复 id,这些方法都不会被调用。

可悲的是,现在我对在 UIManagedDocument 完成加载之前调用这些方法感到沮丧,因此我实际上无法在其中执行任何有用的操作。但这是另一个问题。