0

私のアプリは Parse をバックエンドとして使用しています。アプリのある時点で、別の配列に少なくとも 1 つのタグを含む必要があるオブジェクトをクエリする必要があります。明確にするために、データベースには、タグを配列に保存する Tags プロパティを持つクラス Pictures があります。私のアプリには、比較する必要があるタグの配列があります。Tags プロパティに保存されているタグを少なくとも 1 つ持つオブジェクトのみをフェッチする必要があります。次の 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 を実行するにはどうすればよいですか?

詳細な説明のために、クエリがどうあるべきかを示す例として、データベース内のオブジェクトの 1 つが「タグ」列に次のものを持っているとします。

Tags = ["music", "video", "picture", "chocolate"]

述語で使用したいタグ配列は次のとおりです。

tagsArray = @["picture", "French"];

「picture」タグが付いているため、前のオブジェクトを受け取ることを期待しています。別のオブジェクトに tagsArray 内のタグが 1 つも含まれていない場合、そのオブジェクトはフェッチされません。

Edite: ANY、SOME、ALL、NONE などの集計操作を使用できないことがわかりました。別の解決策を見つけることができますか?

4

3 に答える 3

1

もう 1 つの解決策は、クラウド コードを使用し、Javascript でサーバー上にクエリを記述することです。

次に、定義した新しい API エンドポイントにアクセスして、その方法でクエリの結果を取得します。

于 2014-03-25T13:29:19.673 に答える
0

さて、この場合、 whereKey:ContainedIn:を使用すると実際にうまくいくことがわかりました。辞書の配列を誤って渡していたという私の問題。私が使いたかったのは文字列でできています。

于 2014-03-25T13:58:11.950 に答える