我的应用使用 Parse 作为后端。在应用程序的某个时刻,我必须查询至少应包含另一个数组中的一个标签的对象。为了清楚起见,在数据库中我有一个图片类,它有一个标签属性,将标签保存在一个数组中。在我的应用程序中,我有一系列需要比较的标签。仅应获取至少具有存储在 Tags 属性中的标记之一的对象。我尝试使用以下 PFQuery 函数 whereKey:containedIn: 和 whereKey:containsAllObjectsInArray: 但是它们都不是我想要的。现在我把注意力转移到了 NSPredicates 上。我尝试了以下方法:
PFQuery *postsQuery = [PFQuery queryWithClassName:@"Pictures" predicate:[NSPredicate predicateWithFormat:@"ANY Tags MATCHES ANY ", _tags]];
当我运行代码时,我收到以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "ANY Tags MATCHES ANY "'
我如何执行这样的查询或适合我的情况的 NSPredicate?
作为进一步解释查询的说明: 假设数据库中的一个对象在“标签”列中具有以下内容
Tags = ["music", "video", "picture", "chocolate"]
我想在谓词中使用的标记数组如下:
tagsArray = @["picture", "French"];
我所期待的是收到前一个对象,因为它有“图片”标签。如果另一个对象不包含 tagsArray 中的至少一个标记,则不应获取它。
编辑: 我发现我不能使用聚合操作,例如 ANY、SOME、ALL 或 NONE。我可以找到其他解决方案吗?
最佳答案
另一种解决方案是使用云代码并在服务器上用 Javascript 编写查询。
然后您只需访问您定义的新 API 端点并以这种方式获取查询结果。
关于ios - 使用 NSPredicate 实现高效的 PFQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22635578/