【问题标题】:Multiple Fetch Requests?多个获取请求?
【发布时间】:2019-11-23 17:13:04
【问题描述】:

我目前有一个UITableView,其中有两个部分使用NSFetchedResultsController。我正在尝试弄清楚如何在不同的部分显示不同的实体。我有一个FOLDER 对象,然后还有TAG 对象。我想在每个部分中显示所有这些,即第 1 部分全部 FOLDER,第 2 部分全部 TAGS

关系如下: FOLDER (one to many)-> MOVIE (many to many)-> TAGS

我如何实现这一目标?我需要 2 个单独的 tableView 还是使用单个 tableView 和 2 个不同的获取请求?请帮忙!

编辑:获取和 tableView cellForRowAt 代码。

  private let appDelegate = UIApplication.shared.delegate as! AppDelegate
   private let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
   private var fetchedRC: NSFetchedResultsController<Folder>!

   override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    refresh()
   }

   private func refresh() {
    do {
        let request = Folder.fetchRequest() as NSFetchRequest<Folder>
        request.predicate = NSPredicate(format: "name CONTAINS[cd] %@", query)
        let sort = NSSortDescriptor(keyPath: \Folder.name, ascending: true)
        request.sortDescriptors = [sort]
        do {
            fetchedRC = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
            fetchedRC.delegate = self
            try fetchedRC.performFetch()
        } catch let error as NSError {
            print("Could not fetch. \(error), \(error.userInfo)")
        }
    }
   }

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "folderCell", for: indexPath) as! FolderTableViewCell
    let folder = fetchedRC.object(at: indexPath)
    cell.update(with: folder)
    cell.layer.cornerRadius = 8
    cell.layer.masksToBounds = true
    return cell
   }

【问题讨论】:

  • repo 是开源的吗?
  • @FaZeUnempl0yedd 不,这只是一个项目。
  • 我可以看看它是否在 gitlab 上打开。
  • @FaZeUnempl0yedd 我希望我能哈哈。你对这个问题有什么想法吗?
  • 请粘贴一些关于您的 TableViews 委托/数据源的代码

标签: ios swift uitableview core-data


【解决方案1】:

为您的 2 个部分使用 2 FRC。

一个由您的文件夹 fetchrequest 提供,另一个由标签提供,所有这些都在一个 tableview 中。您的 tableview 委托方法负责您想要访问的内容。这种方式很容易处理。如果您有超过 2 个部分,它只会变得更加复杂。 这样一来,您的 tableview 委托就可以通过 section == 0 或 1 知道要访问哪个 FRC。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    相关资源
    最近更新 更多