如何使用 Fetch Result Controller 正确添加附加部分?

Posted

技术标签:

【中文标题】如何使用 Fetch Result Controller 正确添加附加部分?【英文标题】:How to correctly add additional section with FetchResultController? 【发布时间】:2018-06-18 21:22:01 【问题描述】:

现在我正在使用下一个排序描述符对我的所有部分进行排序:

let sortDescriptors = [NSSortDescriptor(key: "category", ascending: true), NSSortDescriptor(key: "name", ascending: true)]

    let request = DBOShopCardBox.createFetchRequest(predicate: predicate, sortDescriptors: sortDescriptors)
    fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: DBContext.defaultContext, sectionNameKeyPath: "categoryOrderIndex", cacheName: nil) as? NSFetchedResultsController<NSManagedObject>

但现在我想下一个:

我还有一个专栏,type。它有 3 个值 boxfolderfree。我想再添加一个(+1)部分,其中仅包含 type ==folder` 的记录,并按字母顺序对它们进行排序。

我试图在我的数组中再添加一个排序描述符,例如:

NSSortDescriptor(key: "type", ascending: true)

但它会按类型对它们进行排序。但我需要获取类型 == 文件夹的记录,将它们放入单独的部分,然后再对它们进行排序。我现在很困惑。也许有人可以给我一些提示或帮助我? 提前致谢!

【问题讨论】:

【参考方案1】:

这不是 NSFetchedResultsController 所做的。它使用 fetch 的结果(因此得名)通过充当其模型对象来控制(因此得名)表视图。如果您希望表格视图表达获取的结果控制器未表达的内容(不同数量的部分等),则您必须自己实现,可能作为数据的一部分源方法(或者您可能是 NSFetchedResultsController 的子类;不过我不确定那部分)。您可以咨询获取结果控制器的fetchedObjects 以查看它获取的内容,但必须明确指出有一个额外的部分以及其中的内容。

【讨论】:

【参考方案2】:

NSFetchedResultsController 是一个非常酷的课程。它从核心数据中获取并在添加、删除、更改或移动内容时更新 viewController。它为它正在监视的每个对象分配 indexPaths,因此它可以轻松地与 collectionView 或 tableView 交互。但是您不需要在 fetchedResultsController 和 collectionView 之间建立一对一的关系。您可以有两个 fetchedResultsControllers - 一个用于第 0-3 节,另一个用于第 4 节。

此设置的最大挑战是跟踪您正在处理的 indexPath 类型; fetchedResultsControllers 的 indexPaths 不再与 collectionView 的一对一关系。制作一些方法来从不同的 indexPath 空间转换回来,并确保在看到 indexPath 时正确调用它们。

【讨论】:

以上是关于如何使用 Fetch Result Controller 正确添加附加部分?的主要内容,如果未能解决你的问题,请参考以下文章

将 fetch 与 Express、React、cors、cookie 一起使用 - “Access-Control-Allow-Origin”标头

对象中的mysqli_fetch_assoc

将 fetch 与 Passport 一起使用会得到“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”

fetch跨域发送带凭据的请求

fetch_assoc 如何知道您想要表中的下一行?

仅使用 MySQLi 获取一行