带有多个 sortDescriptor 和 Bool 过滤器的 Swift fetchRequest
Posted
技术标签:
【中文标题】带有多个 sortDescriptor 和 Bool 过滤器的 Swift fetchRequest【英文标题】:Swift fetchRequest with multiple sortDescriptors and Bool filter 【发布时间】:2016-09-25 14:19:56 【问题描述】:我正在从核心数据中获取。我有一个布尔属性,它与时间属性一起保存。我需要返回一个布尔值为真的日期数组。我无法让它工作,我要么得到一个空日期数组,要么崩溃。
func datesWithCompleteHBI() -> [Date]
let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext
fetchRequest.resultType = .dictionaryResultType
fetchRequest.propertiesToFetch = ["savedTime", "harveyBradshawIndexComplete"]
let timeSort = NSSortDescriptor(key: "savedTime", ascending: false)
let hbiSort = NSSortDescriptor(key: "harveyBradshawIndexComplete", ascending: false)
fetchRequest.sortDescriptors = [timeSort, hbiSort]
let messageKey = true
fetchRequest.predicate = NSPredicate(format: "harveyBradshawIndexSaveLevel = %@", messageKey as CVarArg)
var dates = [Date]()
do
let results = try managedObjectContext.fetch(fetchRequest) as! [[String:Date]]
dates = results.flatMap $0["savedTime"]
catch let error as NSError
print("Could not fetch \(error), \(error.userInfo)")
print("hbi date array \(dates)")
return dates
【问题讨论】:
【参考方案1】:如果您要返回 Date
和 Bool
,则返回值不能是 [[String:Date]]
let results = try managedObjectContext.fetch(fetchRequest) as! [[String:Any]]
不是过滤代码中的项目,而是将过滤条件添加到谓词
fetchRequest.predicate = NSPredicate(format: "harveyBradshawIndexSaveLevel = %@ AND savedTime == TRUE", messageKey as CVarArg)
现在results
包含过滤后的项目。
【讨论】:
谢谢,我收到一个错误无法使用类型为 '(([String : Any]) throws -> Bool)' 的参数列表调用 'filter' 我更新了答案。过滤谓词中的对象是更好的解决方案。 对不起,这没有成功。感谢您的帮助。当我弄清楚时,我会发布答案。以上是关于带有多个 sortDescriptor 和 Bool 过滤器的 Swift fetchRequest的主要内容,如果未能解决你的问题,请参考以下文章
如何忽略 NSFetchedResultsController 中的 sortDescriptor
Swift 3 中的谓词和 SortDescriptor [重复]
如何修改此方法调用以便使用 sortdescriptors 进行排序?
CoreData:将 MagicalRecord 与 FetchedResultsController 和自定义 sortDescriptor 一起使用