-1

Parse からすべての電子メールのクエリを取得し、ユーザーが入力したものと同じかどうかを確認しようとしています。

PFQuery *query = [PFUser query];
[query whereKey:@"email" equalTo:emailerL];
NSArray *emailers = [query findObjects];
if ([emailers containsObject:emailerL]) {
    [PFUser requestPasswordResetForEmailInBackground:emailerL];

    [self.navigationController popToRootViewControllerAnimated:YES];
}
else {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Please try again" message:@"Email does not exist" delegate:self cancelButtonTitle:@"Gotcha" otherButtonTitles:nil];
    [alert show];
}

なぜ if ステートメントが機能しないのかわかりません。(emailers は配列で、emailerL は文字列です)。

文字列を配列内のデータと比較するのに助けが必要だと思います。

4

2 に答える 2

3

クエリに一致するレコードを少なくとも 1 つ確認するには、getFirstObject代わりに を使用しますnil。一致が見つからない場合は返され、はるかに高速になります。

PFQuery *query = [PFUser query];
[query whereKey:@"email" equalTo:emailerL];

if ([query getFirstObject]) {
    [PFUser requestParrwordResetForEmailInBackground:emailerL];
    // ... etc ...

もちろん、実際には「バックグラウンド」バージョンを使用する必要がありますが、これが最初のステップです。

于 2014-08-04T00:13:56.567 に答える
1

実際のオブジェクトをダウンロードするのではなく、チェックするだけのより良い方法:

PFQuery *query = [PFUser query];
[query whereKey:@"email" equalTo:emailerL];
[query countObjectsInBackgroundWithBlock:^(int number, NSError *error) {
  if(number > 0) {
     ... it exists!
 }
}];

もちろん、シングル スレッドのアプローチもありますが、Timothy が言及しているように、実際にはバックグラウンドを使用する必要があります。

PFQuery *query = [PFUser query];
[query whereKey:@"email" equalTo:emailerL];
if([query countObjects] > 0) {
   ... it exists!
}
于 2014-08-19T14:07:24.577 に答える