【问题标题】:UITableViewController with a separate data source object带有单独数据源对象的 UITableViewController
【发布时间】:2014-03-12 13:10:20
【问题描述】:

我有一个单独的对象用于 UITableViewController 的数据源。我想动态修改数据源,但我不想直接引用数据源中的 tableView 对象。如何通知控制器有关数据源的更改?

目前我使用通知中心,但我认为这不是正确的选择。

【问题讨论】:

  • 什么是修改数据源?为什么不是视图控制器?
  • 我使用了这个link中的例子。数据源由发送通知的后台服务更新。
  • 我发现为此目的使用通知有问题。
  • @rokjarc,通知应该用于向未知收件人广播事件信息。这里可能是这种情况,但不太可能。从知识/责任的角度来看,直接引用表格视图更好。
  • @rokjarc,问题是关于 dataSource->tableView,而不是 model->dataSource。模型广播更改事件是合适的。 dataSource 本身已经与表格视图绑定在一起,因此此处不适合通知。

标签: ios datasource tableview


【解决方案1】:

我在这件事上得到了 struct,我找到的一个替代方案是 KVO,但我在实施 KVO 时没有取得太大的成功,所以我也在考虑使用 Block。您更喜欢哪种方法?

【讨论】:

    【解决方案2】:

    给数据源一个要刷新的表视图的引用或添加一个属性是合适的,该属性是数据源在更新某些数据时调用的块(此块由视图控制器提供并重新加载表格视图)。

    块方法更通用,让您的数据源更容易与表/集合视图一起使用。

    在这两种情况下,您所查看的关系都是直接的并且是一对一的。这不是使用通知的合适位置。通知适用于非直接、广播类型 1 到许多通信要求。

    【讨论】:

    • 我认为创建块属性是正确的方法。这与来自 objc.io 的人用来配置单元格的方法相同。
    【解决方案3】:

    可以发送NSNotification 告诉UITableView 模型已更改,再次读取数据并重新加载表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多