4

parse.comにクエリを実行して、指定した2つの値が配列に存在するかどうかを確認する必要があります。

ドキュメントには次のように記載されています。「複数の制約を指定できます。オブジェクトは、すべての制約に一致する場合にのみ結果に含まれます。つまり、制約のANDのようなものです。」

私の経験ではそうではないと言っています。

私はこのようにクエリしています:

NSString *user1 = [self.users objectAtIndex:0];
NSString *user2 = [self.users objectAtIndex:1];

NSLog(@"User 1: %@", user1);
NSLog(@"User 2: %@", user2);

PFQuery *gameQuery = [PFQuery queryWithClassName:@"GameObject"];
[gameQuery whereKey:@"users" equalTo:user1];
[gameQuery whereKey:@"users" equalTo:user2];

NSArray *gameObjects = [gameQuery findObjects];

NSLog(@"gameObjects: %@", gameObjects);

私のログには次のように表示されます。

2012-04-21 14:12:23.656 Cargo[5435:707] User 1: 689XXX62
2012-04-21 14:12:23.658 Cargo[5435:707] User 2: 51XXXX994

2012-04-21 14:12:24.614 Cargo[5435:707] GameObject: <GameObject:W7qXXXPLWp> {
  users =     (
     8XXX66,
     51XXXX994
  );
}

クエリは明らかに、制約のいずれかに一致するオブジェクトの配列を返します。両方ではありません...

どうすればこれを解決できますか?

4

2 に答える 2

2

PFQuery.hで詳しく説明されています

この利用可能な方法を使用してください。これにより、指定された配列内のすべてのオブジェクトが存在する必要があります。

- (void)whereKey:(NSString *)key containsAllObjectsInArray:(NSArray *)array;

PFQuery *gameQuery = [PFQuery queryWithClassName:@"GameObject"];
[gameQuery whereKey:@"users" containsAllObjectsInArray:@[user1,user2]];

NSArray *gameObjects = [gameQuery findObjects];
于 2013-07-08T19:33:37.817 に答える
1

解析ヘッダーのドキュメントから:

/*!
  Add a constraint to the query that requires a particular key's object to be contained in the provided array.
 @param key The key to be constrained.
 @param array The possible values for the key's object.
 */
- (void)whereKey:(NSString *)key containedIn:(NSArray *)array;

あなたはそれをこのように呼ぶでしょう:

[query whereKey: @"users" 
    containedIn: [NSArray arrayWithObjects: user1, user2, nil]];
于 2012-04-24T17:14:54.620 に答える