如何快速为 NSDate 做核心数据获取谓词?我想按月过滤
Posted
技术标签:
【中文标题】如何快速为 NSDate 做核心数据获取谓词?我想按月过滤【英文标题】:How to do core data fetch predicate for NSDate in swift? i want to filter it by months 【发布时间】:2015-11-23 20:39:19 【问题描述】:// 获取数据
var request = NSFetchRequest(entityName: "Users")
request.returnsObjectsAsFaults = false;
request.predicate = NSPredicate(format: "name = %@", txtUsername.text!)
do
let results:NSArray = try context.executeFetchRequest(request) as! [NSManagedObject]
if (results.count > 0)
var res = results[0] as! NSManagedObject
txtname.text = res.valueForKey("name") as! String
txtPassword.text = res.valueForKey("password") as! String
print(results.count)
不知道如何断言 NSdate,我的实体有三个属性,其中一个是日期类型,所以如果有人知道,请举个例子告诉我
【问题讨论】:
Using NSDate within an NSPredicate的可能重复 想要它在斯威夫特兄弟 Objectives-C 和 Swift 中的谓词是相同的。 我想用特定月份来预测它?该怎么做?? 【参考方案1】:你可以这样做
获取一个月的第一个日期和最后一个日期,然后像这样使用
let startDate = NSDate().startOfMonth()
let endDate = NSDate().endOfMonth()
request.predicate = NSPredicate(format: "dateField >= %@ AND dateField <= %@", startDate!, endDate!)
其中 startDate 和 endDate 是 NSDate 变量。这将为您获取当前月份的数据。同样,您也可以在其他月份使用它。
您可以使用以下代码获取月份的开始和结束日期
extension NSDate
func startOfMonth() -> NSDate?
let calendar = NSCalendar.currentCalendar()
let currentDateComponents = calendar.components([.Year, .Month], fromDate: self)
let startOfMonth = calendar.dateFromComponents(currentDateComponents)
return startOfMonth
func dateByAddingMonths(monthsToAdd: Int) -> NSDate?
let calendar = NSCalendar.currentCalendar()
let months = NSDateComponents()
months.month = monthsToAdd
return calendar.dateByAddingComponents(months, toDate: self, options: [])
func endOfMonth() -> NSDate?
let calendar = NSCalendar.currentCalendar()
if let plusOneMonthDate = dateByAddingMonths(1)
let plusOneMonthDateComponents = calendar.components([.Year, .Month], fromDate: plusOneMonthDate)
let endOfMonth = calendar.dateFromComponents(plusOneMonthDateComponents)?.dateByAddingTimeInterval(-1)
return endOfMonth
return nil
【讨论】:
我以前试过这个,但是出错了,你能告诉我把这个放在哪里吗? @AnkitaShah 我需要把它放在课堂之外吗? @AnkitaShah 这是一个 NSDate 扩展。所以把它放在代码的末尾。我正在用示例编辑答案 是的。扩展将在类之外 在这一行抛出错误 - request.predicate = NSPredicate(format: "dateField >= %@ AND dateField以上是关于如何快速为 NSDate 做核心数据获取谓词?我想按月过滤的主要内容,如果未能解决你的问题,请参考以下文章
带有谓词的核心数据获取请求。需要正确的 NSPredicate