我目前有一个UITableView
,有 2 个部分使用NSFetchedResultsController
.我正在尝试弄清楚如何在不同部分中显示不同的实体。我有一个FOLDER
对象,然后也TAG
对象。我想在每个部分中显示所有这些,即第 1 节所有FOLDER
,第 2 节所有TAGS
。
关系是这样的:FOLDER (one to many)-> MOVIE (many to many)-> TAGS
我如何实现这一点?我是否需要 2 个单独的tableView
,还是需要将单个tableView
与 2 个不同的获取请求一起使用?请帮忙!
编辑:获取和表查看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
}
对 2 个部分使用 2 个 FRC。
一个由您的文件夹获取请求提供,另一个由标签提供,所有这些都在一个表视图中。表视图委托方法负责处理要访问的内容。这样很容易处理。如果您有超过 2 个部分,它只会变得更加复杂。 这样,您的表视图委托就通过部分 == 0 或 1 知道要访问哪个 FRC。