多个提取请求?

时间:2019-07-15 01:13:17

标签: ios swift uitableview core-data

我目前有一个UITableView,其中有2个部分使用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
   }

1 个答案:

答案 0 :(得分:1)

在2个部分中使用2个FRC。

一个在表视图中通过文件夹fetchrequest喂,另一个通过标记喂。您的tableview委托方法会照顾您要访问的内容。这样很容易处理。如果您只有两个以上的部分,则只会变得更加复杂。 这样,您的表视图委托就可以通过== 0或1知道要访问哪个FRC。