如何使用FetchResultController正确添加其他部分?

时间:2018-06-18 21:22:02

标签: ios swift core-data nsfetchedresultscontroller

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

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 ==文件夹中的NSSortDescriptor(key: "type", ascending: true) 文件夹,并按字母顺序排序。

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

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    login = true;
    InserirCliente tela_inserir = new InserirCliente(login);
    jDesktopPane1.add(tela_inserir);
    tela_inserir.setVisible(true);
}                                        

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    login = false;
    InserirCliente tela_inserir = new InserirCliente(login);
    jDesktopPane1.add(tela_inserir);
    tela_inserir.setVisible(true);
}    

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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