核心数据谓词中的XOR?

时间:2011-11-29 15:38:44

标签: objective-c ios core-data nspredicate

有没有办法使用XOR作为谓词的运算符。

我有一个File对象,我想知道是否有英文文件。如果它不是英文版,它应该返回德语版本。如果两者都可用,则不应返回德语版本。这就是我需要XOR的原因。

示例:

[NSPredicate predicateWithFormat:@"file.language = 'en' XOR file.language = 'de'"];

这将仅返回英文文件。

1 个答案:

答案 0 :(得分:2)

根据http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-SW1,似乎没有这样的运营商。如果需要,你必须使用parantheses并将XOR b转换为(a AND NOT b)OR(不是a和b)。无论如何,请注意Henning对此的评论无论如何都没有帮助。您的陈述中的一个问题是它不平衡,即您希望英语版本具有优先权。最简单的方法可能是

  • file.language = 'en'
  • 过滤数组
  • 如果该数组为空:
    • file.language = 'de'
    • 过滤数组

这样您就可以确保英文文件的优先级。