NSpredicate"和"操作不按预期工作

时间:2018-06-07 01:49:34

标签: ios swift core-data

当我循环并打印值时,我从核心数据实体获取所有值时,我有以下数据

  • 输入:inviteBy:mobile
  • emp:1:1234123131
  • emp:1:2314213211
  • cust:1:1214212312
  • cust:1:2412142121
  • cust:1:5421321421
  • emp:2:3214213211

我想过滤所有非emp类型的记录,而不是1的邀请,所有的值都是string类型。所以我的谓词是

let predicate = NSPredicate(format: "(type != %@) && (invitedBy != %@)","emp", "1")

当我使用此谓词获取值时,它返回空的最后4个值。

如果我必须在mysql中编写查询,我会编写

SELECT * FROM invite where type != "emp" AND invitedBy != "1"

我所写错误的谓词也是如此,我应该采用不同的方式。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是你的谓词:

NSPredicate(format: "(type != %@) && (invitedBy != %@)","emp", "1")

代替%@,它与

相同
(type != 'emp') && (invitedBy != '1')

您的投诉是

  

当我使用此谓词获取值时,它返回空的最后4个值。

这是你的最后一条记录:

  

emp:2:3214213211

让我们替换谓词并简化:

('emp' != 'emp') && ('2' != '1')
FALSE && TRUE
FALSE

因此,对于最后一条记录,谓词为false。事实上,所有记录都是错误的。您可以亲自手动测试其他记录以进行验证。

如果你想要一个对最后四条记录都是真的谓词,你可能会想要这样:

NSPredicate(format: "(type != %@) || (invitedBy != %@)","emp", "1")

答案 1 :(得分:0)

我认为回归是空的。 screenshot