如何添加核心数据属性以用于 FRC sectionName Keypath 值

Posted

技术标签:

【中文标题】如何添加核心数据属性以用于 FRC sectionName Keypath 值【英文标题】:How do add up an CoreData attribute to use for a FRC sectionNameKeypath value 【发布时间】:2016-12-22 23:53:10 【问题描述】:

最近有人告诉我,每个 tableView 应该只有一个 FetchResultsController。我的表格视图有 2 个部分,我需要以某种方式使用 sectionNameKeyPath 属性来告诉每个实体它们应该位于表格视图的哪个部分。

我正在尝试做的是将我的实体的属性之一的值相加,如果它是积极的,则将其放在第 0 节中,如果它是消极的,则将其放在第 1 节中。

在我有 2 个获取请求和 2 个 FRC 之前,其中一个看起来像这样

let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()
    fetchRequest.predicate = NSPredicate(format:"statement.@sum.amountOwed >= 0")
    let sort = NSSortDescriptor(key: #keyPath(Person.name), ascending: true)
    fetchRequest.sortDescriptors = [sort]
    positiveFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: coreDataStack.managedContext, sectionNameKeyPath: nil, cacheName: nil)



    do
     try positiveFetchedResultsController.performFetch()
     catch let error as NSError
        print("Fetching error: \(error), \(error.userInfo)")
    

是否可以使用谓词的结果来使用 sectionNameKeyPath 值来判断该实体应该驻留在哪个部分?

【问题讨论】:

【参考方案1】:

我认为你可以使用一个 FetchResultsController。

let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()

let sortDescriptor1 = NSSortDescriptor(key: "section.no", ascending: true)
let sortDescriptor2 = NSSortDescriptor(key: "person.no", ascending: false)

fetchRequest.sortDescriptors = [sortDescriptor1, sortDescriptor2]

let aRowResults = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: "section.no", cacheName: nil)

在您的表格视图中,indexPath.section 将对应于节的编号。

【讨论】:

属性(amountOwed)的计算在哪里起作用,所以我知道Person应该放在哪个部分? 为什么不添加新属性?如果(amountOwed>0),.no=0。 if (amountOwed

以上是关于如何添加核心数据属性以用于 FRC sectionName Keypath 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在重新进入查看时转储 Core Data 搜索结果 FRC?

如何将查询更改为核心数据(神奇记录)中的获取结果?

以编程方式添加到核心数据实体(如 IB 绑定“添加”)

核心数据:setPrimitiveValue 和保存更改

我可以使用NSFetchedResultsController来显示不适合UITableView的数据吗?

向核心数据添加属性但无法获取 SQL 文件以匹配