【问题标题】:Populate Table View Sections with CoreData and Array使用 CoreData 和数组填充表视图部分
【发布时间】:2019-09-18 04:13:30
【问题描述】:

我想用一堆文件夹填充我的表视图(类似于 Apple Notes 应用程序的文件夹结构屏幕)。我希望电视中的第一项是一个单元格,该单元格会导致其他文件夹中的所有内容的组合。我可以显示所有文件夹,但在尝试弄清楚如何显示“组合内容”文件夹时遇到了麻烦。所有单独的文件夹都是在 CoreData 上创建的,并通过 NSFetchedResultsController 提供。

我创建了一个仅包含单个文件夹实例的数组,用作组合文件夹的对象。我有以下代码来尝试创建 2 个部分(1 个用于组合,另一个用于单个文件夹)但目前它只会显示我在 case 0 中放置的任何内容。我这样做的方式是否正确?

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
    case 0:
        return comboFolder.count
    case 1:
        return fetchedRC.fetchedObjects?.count ?? 0
    default:
        return 0
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "folderCell", for: indexPath) as! FolderTableViewCell

    switch indexPath.section {
    case 0:
        let folder = comboFolder[indexPath.row]
        cell.updateComboFolder(with: folder)
    case 1:
        let folder = fetchedRC.object(at: indexPath)
        cell.update(with: folder)

    default:
        print("default")
    }
    return cell
 }

【问题讨论】:

  • 对于初学者,您应该在 numberOfSections 函数中返回 2
  • 是的,对不起。这是我在编辑时的一个错误。有 2 会导致崩溃...
  • 崩溃在哪里,它在说什么?
  • @nambatee 'NSInternalInconsistencyException',原因:'在索引 0 的部分中索引 1 处没有对象'
  • 你认为我应该这样做吗?我是否需要将数组全部废弃并通过 CoreData 和排序来完成?

标签: ios swift uitableview core-data nsfetchedresultscontroller


【解决方案1】:

这是一个包含基本设置的示例项目 - https://github.com/nambatee/CombinedFolders1

诀窍是调整indexPath。您正在处理 2 个部分,但您的 NSFetchedResultsController 只知道 1 个部分。因此,您需要注意不要向NSFetchedResultsController 询问索引1 部分中的对象。

【讨论】:

  • @a.wip 如果您想试验完整的 Core Data 设置,您可以拥有一个单独的 FolderGroup 模型对象,其中包含一个 name 和一组 foldersFolder 需要有一个额外的groups 属性,即Set<FolderGroup>?。您将从 2 个FolderGroup 对象开始:“主文件夹”和“自定义文件夹”。然后,每次创建新文件夹时,都必须将其分配给这 2 个组。这样你就可以在FolderTableViewController 中使用FolderGroup 获取结果控制器,并将sectionNameKeyPath 设置为name
  • @a.wip 因为您有 2 个组,所以您将自动拥有 2 个部分。这种设置会有不同的权衡。您的模型会更重,因此获取速度会更慢。你必须经过更多的抽象层才能得到你的笔记(组 -> 文件夹 -> 笔记)。
  • 好的,太棒了。非常感谢您的帮助!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2017-04-27
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
相关资源
最近更新 更多