【发布时间】:2017-07-12 05:22:20
【问题描述】:
我有一个应用程序有多个时间条目,日期保存为 NSDate。
我想使用获取请求来过滤我从其他地方获得的特定年份和月份。如何使用 NSPredicate 过滤年份和月份?
let predicate = NSPredicate(format: "%K == %D && %K == %D", ???, selectedMonth, ???, selectedYear)
更新
使用 Raki 指出的帮助,我想出了以下代码:
var dateComp = DateComponents()
dateComp.year = Int(selectedYear)
dateComp.month = Int(selectedMonth)
dateComp.day = 1
let calendar = Calendar.current
let firstDayOfTheMonth = calendar.date(from: dateComp)
var oneMonth = DateComponents()
oneMonth.month = 1
let beginningOfNextMonth = calendar.date(byAdding: oneMonth, to: firstDayOfTheMonth!)
还有谓词:
let predicate = NSPredicate(format: "date >= %@ AND date < %@", firstDayOfTheMonth as! CVarArg, beginningOfNextMonth as! CVarArg)
我收到带有以下消息的 SIGABRT:
无法将“Foundation.Date”(0x1073a0ae0)类型的值转换为“Swift.CVarArg”(0x1196851c8)。
Xcode 建议我添加“as!CVarArg”
更新 2
以下谓词现在有效:
let predicate = NSPredicate(format: "%K >= %@ && %K < %@", "date", firstDayOfTheMonth! as NSDate, "date", beginningOfNextMonth! as NSDate)
【问题讨论】:
-
您保存的日期格式是什么?
-
我正在使用 NSDate。在 CoreData 中输入“日期”。
-
谢谢拉基。但是现在我在运行时遇到了 fetchRequest 的另一个问题。见上文...
标签: ios swift3 nsdate nspredicate nsfetchrequest