在搜索之前过滤 NSArraycontroller 核心数据
Filter NSArraycontroller Core Data before searching
我有一个 NSArrayController 来管理存储在核心数据中并显示在 NSTable 中的联系人。 table 为用户提供了一个搜索字段,可以按姓名查找联系人。一切都在 Swift 中使用 Cocoa 绑定实现并且运行良好。
现在我想在用户键入他的搜索字符串之前添加一个额外的过滤器。过滤器应通过创建日期等附加属性来限制联系人。如何才能做到这一点?通过修改谓词还是我需要继承 NSArrayController?
如有任何帮助,我们将不胜感激。
同时我尝试了 Willeke 提到的方法。最初使用 Interface Builder 为数组控制器设置默认获取谓词,并在每次日期值更改时执行以下代码,效果很好。
let fetchRequest = ContactArrayController.defaultFetchRequest()
fetchRequest.predicate = NSPredicate(format: "events.@max.eventDate < %@", lastDate as NSDate)
try? ContactArrayController.fetch(with: fetchRequest, merge: false)
其中事件是数组控制器中实体的相关实体。
然而,这对我来说似乎是一个开销,因为每次都需要将数据提取到数组控制器中,而不是仅仅应用过滤器
也许有更好的解决方案
我有一个 NSArrayController 来管理存储在核心数据中并显示在 NSTable 中的联系人。 table 为用户提供了一个搜索字段,可以按姓名查找联系人。一切都在 Swift 中使用 Cocoa 绑定实现并且运行良好。 现在我想在用户键入他的搜索字符串之前添加一个额外的过滤器。过滤器应通过创建日期等附加属性来限制联系人。如何才能做到这一点?通过修改谓词还是我需要继承 NSArrayController?
如有任何帮助,我们将不胜感激。
同时我尝试了 Willeke 提到的方法。最初使用 Interface Builder 为数组控制器设置默认获取谓词,并在每次日期值更改时执行以下代码,效果很好。
let fetchRequest = ContactArrayController.defaultFetchRequest()
fetchRequest.predicate = NSPredicate(format: "events.@max.eventDate < %@", lastDate as NSDate)
try? ContactArrayController.fetch(with: fetchRequest, merge: false)
其中事件是数组控制器中实体的相关实体。
然而,这对我来说似乎是一个开销,因为每次都需要将数据提取到数组控制器中,而不是仅仅应用过滤器
也许有更好的解决方案