【问题标题】:How to pass data from child view of DetailViewController to MasterViewController?如何将数据从 DetailViewController 的子视图传递到 MasterViewController?
【发布时间】:2012-07-08 01:13:57
【问题描述】:

我有一个 iPad 故事板驱动的应用程序,它使用拆分视图来显示主视图和详细视图。

DetailViewController 有一个子 UITableViewController,它在 DetailViewController 中填充原型 UITableView。 UITableViewController 使用 NSFetchedResultsController 来管理数据检索,方便 UITableView 使用数据。

MasterViewController 包含另一个 UITableView,其中填充了 UITableViewController 中包含的数据子集。

我遇到的问题是我需要 MasterViewController 能够从 NSFetchedResultsController 记录集中更新它的内容,但我发现我不能为此目的使用委托,因为 UITableViewController 是 DetailViewController 的子项,它是 MasterViewController 的子级。

虽然我知道我可以使用 NSNotificationCenter 来执行此操作,但我希望我可以通过视图层次结构将相关数据传递回 MasterViewController。我曾考虑将 FRC 中的数据加载到实例变量中,并使用 KVO 触发 DetailViewController 上的委托方法,但这似乎很复杂。  这是目前设置的概述:

MasterViewController --> DetailViewController --> UITableViewController.NSFetchedResultsController

谁能建议实现这一目标的最佳方法?

【问题讨论】:

    标签: uitableview nsfetchedresultscontroller uistoryboard ipad


    【解决方案1】:

    我将使用 NSFetchedResultsController 的另一个实例将数据提供给 MasterViewController 中的表视图。

    【讨论】:

    • 鉴于我已经将我需要的数据提取到内存中并且可以快速枚举它以便能够生成 MasterViewController 所需的数据,因此再次重新检索所有数据似乎效率低下。我正在研究使用 NSNotifications 来传递生成的数据,因为我还需要在 MasterViewController 中发送所选单元格的详细信息。
    • 为了避免传播对效率的误解,我要澄清的是,托管对象上下文上的后续获取请求不会重新检索已经在内存中的对象。
    【解决方案2】:

    我通过使用NSNotification 和方法postNotificationName:object:userInfo: 解决了这个问题,将值的NSDictionary 作为userInfo 传递。 然后我将我的 MasterViewController 设置为监听通知并处理 NSDictionary 以更新自身。

    这符合 Apple 制定的编程指南,还允许我在我的应用程序的任何地方传递相同的信息。

    更多细节在这里:Notification Programming Topics

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多