如何在 NSPredicate 中重现 MATCHES 以查询 Realm?
How to reproduce MATCHES in NSPredicate to query Realm?
我有一个使用 NSPredicate
的查询,它采用正则表达式并匹配路径:
let predicate = NSPredicate(format: "path MATCHES '/test/([^/]*[^/])$'")
匹配文件夹 test 中的所有内容,但排除 test 中文件夹的所有子文件夹,如下所示:
- /test/abc -> 是
- /test/abc/def -> 否
问题是,我无法在 Realm.io 中使用 NSPredicate
的 MATCH
关键字。我怎样才能重现这个查询以便它在 Realm 中工作?
为完整性添加例外:
*** Terminating app due to uncaught exception 'Invalid operator type', reason: 'Operator type 6 not supported for string type'
这里是来自 Realm 的 Joe。当前 MATCH
的 Realm 查询不支持正则表达式,您需要手动执行此操作。我会构建一个 NSArray 并在其上使用过滤器谓词。我们知道这一点并跟踪所有不受支持的谓词 here
所以现在我已经解决了这样的问题(修改模型,我想避免):
- 我只存储父级的路径,而不是完整的路径和名称。名称存储在不同的字段中(为了获得完整路径,我将两个字符串拼接在一起)
- 我使用
NSPredicate(format: "path ==[c] %@", "/test/")
来获取文件夹 test. 的内容,而不是匹配正则表达式
为什么我对这个解决方案不是很满意:
我想避免将字段 fullPath 分成两个字段,因为当文件被重命名+移动时,它只是一个操作 - 重写 fullPath 在数据库中。这似乎是一个小问题,但只有一个地方负责使它更加健壮,因为文件一直在应用程序环境中移动和重命名。
我有一个使用 NSPredicate
的查询,它采用正则表达式并匹配路径:
let predicate = NSPredicate(format: "path MATCHES '/test/([^/]*[^/])$'")
匹配文件夹 test 中的所有内容,但排除 test 中文件夹的所有子文件夹,如下所示:
- /test/abc -> 是
- /test/abc/def -> 否
问题是,我无法在 Realm.io 中使用 NSPredicate
的 MATCH
关键字。我怎样才能重现这个查询以便它在 Realm 中工作?
为完整性添加例外:
*** Terminating app due to uncaught exception 'Invalid operator type', reason: 'Operator type 6 not supported for string type'
这里是来自 Realm 的 Joe。当前 MATCH
的 Realm 查询不支持正则表达式,您需要手动执行此操作。我会构建一个 NSArray 并在其上使用过滤器谓词。我们知道这一点并跟踪所有不受支持的谓词 here
所以现在我已经解决了这样的问题(修改模型,我想避免):
- 我只存储父级的路径,而不是完整的路径和名称。名称存储在不同的字段中(为了获得完整路径,我将两个字符串拼接在一起)
- 我使用
NSPredicate(format: "path ==[c] %@", "/test/")
来获取文件夹 test. 的内容,而不是匹配正则表达式
为什么我对这个解决方案不是很满意:
我想避免将字段 fullPath 分成两个字段,因为当文件被重命名+移动时,它只是一个操作 - 重写 fullPath 在数据库中。这似乎是一个小问题,但只有一个地方负责使它更加健壮,因为文件一直在应用程序环境中移动和重命名。