【问题标题】:sectionNameKeyPath with NSFetchedResultsController not working带有 NSFetchedResultsController 的 sectionNameKeyPath 不起作用
【发布时间】:2011-09-30 01:16:34
【问题描述】:

我有一个实体Order,其属性为paid,它是一个布尔值。

我想在UITableView 中显示所有订单,但我想将它们分成两个部分:“未支付”和“已支付”。所以我想我会以sectionNameKeyPath 的形式给出“付费”,就像这样:

fetchedResultsController = [[NSFetchedResultsController alloc]
         initWithFetchRequest:fetchRequest
         managedObjectContext:managedObjectContext
           sectionNameKeyPath:@"paid"
                    cacheName:nil];

根据我的推理,这将导致两个部分,其中第一部分包含所有已付款 = NO (0) 的订单,第二部分包含已付款 = YES (1)。

但是,当我添加一个已付款 = YES 的新订单时,它会显示在第一部分。当我签入获取的结果控制器委托时,我可以看到创建了一个带有 indexPath [0,0] 的新记录!为什么不插入第二部分?

【问题讨论】:

    标签: iphone objective-c cocoa-touch core-data nsfetchedresultscontroller


    【解决方案1】:

    尝试将排序描述符数组添加到与您的 NSFetchedResultsController 一起使用的 NSFetchRequest。

    您需要先按付费布尔值进行排序,然后再按您要排序的任何其他值进行排序。

    Swift 3 示例:

    fetchRequest = ... // <- instantiate your fetch request
    
    let sortByPaid = NSSortDescriptor(key: "paid", ascending: true)
    let sortByCustomerName = NSSortDescriptor(key: "customer.name", ascending: true) // <- if Order had a relationship to Customer that had an attribute name 
    fetchRequest.sortDescriptors = [sortByPaid, sortByCustomerName]
    
    // now instantiate fetchedResultsController as in the question above
    

    【讨论】:

    • 另外,添加的排序描述符(如果它是单个的)应该不同于用于生成 keypath 的排序描述符
    • 那么这个问题的实际答案是什么?我究竟应该怎么做?
    • 工作 8 年后 :)
    • 工作正常,但请注意此描述符(用于paid)应位于列表的首位
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多