【问题标题】:How to have 2 tableview in one view controller with 1 tableview being dependent to the other如何在一个视图控制器中有 2 个表视图,其中 1 个表视图依赖于另一个
【发布时间】:2014-11-18 05:32:39
【问题描述】:

我正在创建一个需要有 2 个链接到核心数据的 TableView 的应用程序。第一个表视图是父表视图,其中用户需要在第二个表视图填充相关数据之前选择它。我一直在查看示例和解决方案,但遇到了 FetchRequest 控制器的问题。它如何知道要查询哪个表?

我看到了一个例子here,但它并不完整。或者至少,它没有给出关于如何设置第二个表格视图的委托和数据源的完整细节。好吧,委托是 ViewController 但数据源呢?它怎么知道要从哪些数据中提取?

我希望你们能帮助解决这个难题,或者至少给我举个例子。

【问题讨论】:

    标签: uitableview core-data delegates xcode6


    【解决方案1】:

    我会使用UIViewController 而不是UITableViewController。在代码或故事板中添加两个UITableViews,并为它们创建两个属性——假设parentTableViewchildTableView。使您的视图控制器成为两个 tableViews 的委托和数据源。实现相关方法时,首先检查方法调用中传入的tableView参数,并提供相关数据:

    if (tableView == self.parentTableView) {
        // provide data relevant to the parent...
    
    } else { // provide data relevant to the child...
    
    }
    

    要为表提供数据,您可以为父级使用一个获取的结果控制器,然后使用父子关系为子表视图派生数据(例如,对于子表视图的numberOfRowsInSection,你可以使用[self.selectedParent.children count],等等)。这可以正常工作,但您失去了为子对象使用获取结果控制器的好处:自动表格部分,以及在插入/更新/删除新子对象时自动更新。

    如果您愿意,可以使用两个单独的获取结果控制器 - 一个用于父对象,另一个用于子对象。为每个属性创建一个属性,例如parentFRCchildFRC,然后使用相关的属性在上面的 tableView 委托方法中提供数据。对于childFRC,您应该设置一个谓词,将获取的子对象限制为那些其父对象是parentTableView 中选定父对象的对象。 (您需要在选定的父更改时重复 childFRC的获取。

    )。

    如果您使用 NSFetchedResultController 委托方法来跟踪数据的更改,您应该再次将您的视图控制器设置为两个 FRC 的委托,并在您的相关方法的实现中,检查 fetchedResultController 参数在方法调用中传递以确定哪个对象已更改 - 父对象或子对象 - 并更新相应的表。

    【讨论】:

    • 您为我的困境提供了一些启示!我会尽快做的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多