gpt4 book ai didi

swift - NSPredicate - 使用日期属性搜索

转载 作者:行者123 更新时间:2023-11-28 06:13:11 27 4
gpt4 key购买 nike

我有一个 NSTableview,它获取核心数据的日期。在我的实体中有一个类型为 Date 的属性。

现在想实现一个搜索功能。为此,我有这段代码:

@IBAction func search(_ sender: NSSearchField) {
let predicate : NSPredicate?
if sender.stringValue.isEmpty {
predicate = nil
} else {
predicate = // ?
}
requestData(predicate: predicate)
}

但我不知道谓词必须如何,如果我使用属性 Date 过滤我的结果

例如:

  • 搜索字段值 = 01.12 => 显示核心数据日期为 01.12.xxxx 的所有数据
  • 搜索字段值 = 12.2017 => 显示核心数据日期为 xx.12.2017 的所有数据
  • 搜索字段值 = 2017 => 显示核心数据日期为 xx.xx.2017 的所有数据

等等

我希望你能理解我的问题并能帮助我:)

最佳答案

如前所述,这是一个棘手的案例。但我相信这是可以做到的。正如 Alex 所建议的,您可以使用 DateComponents 来比较和查找所需的日期。但是要做到这一点,您应该在您的数据模型类中为您的 CoreData 表定义额外的变量。示例:

var calendar = Calendar(identifier: .gregorian)
var openDateComponents: DateComponents {
return calendar.dateComponents([.year, .month, .day], from: openTime! as Date)
}

不幸的是,您不能将它用作谓词。但是这个定义的变量将允许您在从表中获取数据后使用它。您可以使用循环轻松实现过滤。所以我建议你这样做:

  1. 在您的数据模型类中定义变量。这将允许您在获取数据后过滤掉获取的结果。

  2. 为谓词实现附加逻辑。这将使您能够最大限度地减少从数据库表中提取的记录数。

例如:输入字符串为 06.2017 (MM.YYYY)。您可以使用 DateFormatter 将其转换为 Date (NSDate) 类型的两个变量,然后将这两个变量用作谓词:

request.predicate = NSPredicate(format: "someDate > %@ and somedate < %@", inputDateStart as NSDate, inputDateEnd)

所以这只会帮助您减少将从表中提取的记录数。但如果输入字符串类似于 12.02.XXXX,这将无济于事。

关于swift - NSPredicate - 使用日期属性搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com