【问题标题】:UITableViewController subclass implements UIDataSourceModelAssociation protocol but its methods are never calledUITableViewController 子类实现 UIDataSourceModelAssociation 协议,但它的方法永远不会被调用
【发布时间】:2014-11-08 17:28:52
【问题描述】:

我的应用使用斯坦福课程的 CoreDataTableViewController,它是 UITableViewController 的子类。

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

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

我在 CoreDataTableViewController 中实现了 UIDataSourceModelAssociation,希望它对我的所有视图都有效,但是在调试它时,该功能不起作用,并且添加断点我发现当我放我的应用程序使用主页按钮进入后台,或者通过在 XCode 中重新运行来恢复它。

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

我在表单的子类 viewDidLoad 函数中添加了理智断言

assert(self.tableView);
assert(self.tableView.dataSource == self); <--- fails here

在检查我们自己的数据源时失败。通过记录和使用调试器,我可以看到此时 dataSource 不是 nil。

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

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

只要稍微澄清一下子类化应该如何处理跨类的自指针,并想知道是否有人能弄清楚为什么我的协议方法没有被调用,将不胜感激。

干杯

【问题讨论】:

    标签: ios uitableview datasource state-restoration


    【解决方案1】:

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

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

    可悲的是,在 UIManagedDocument 完成加载之前调用这些方法让我感到沮丧,因此我实际上无法在它们中做任何有用的事情。这是另一个问题。

    【讨论】:

    • 感谢您的投入,我也遇到了这种“行为”。确保 UITableViewController 子类将其 dataSource 属性显式设置为 self(或其他),从而调用 UIDataSourceModelAssociation 方法。
    猜你喜欢
    • 2018-09-02
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多