0

私のアプリには、ユーザーが友達を追加できるView Controllerがあります。アプリはユーザーのアドレス帳にアクセスし、Parse.com バックエンド サーバーを呼び出して、アドレス帳の連絡先のいずれかが既にアプリを使用しているかどうかを確認します。見つかった場合は、それらのユーザーの PFObject を UITableView の行に配置します。

表の各行にはボタンがあります。ユーザーが行のボタンを押すと、次のコードが実行され、friendsRelation という PFRelation オブジェクトが作成され、タップされた特定の行の PFObject が追加されます。

PFRelation *friendsRelation = [self.currentUser relationforKey:@"friendsRelation"];

    PFUser *user = [self.allUsersInParse objectAtIndex:indexPath.row];

    [friendsRelation addObject:user];

    [self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {

        if(error) {

            NSLog(@"%@ %@", error, [error userInfo]);

        }
}];

これはすべて、ほとんどの場合うまく機能します。Parse で現在のユーザーの行を確認し、friendsRelation 列/キーの [View Relations] ボタンをクリックすると、追加したばかりの正しいユーザー情報が表示されます。

ただし、メインの _User クラスに戻り、現在のユーザーによって追加されたフレンドの行を見つけて、friendsRelation 列/キーの [View Relations] ボタンをクリックすると、ユーザー データが含まれていません。追加したばかりの現在のユーザーに対して。

したがって、基本的に、誰かを友達リストに追加すると、その人は友達リストに表示されますが、新しい友達が友達リストに行って見た場合、あなたはそこにいません.

現在のユーザーによって追加されているユーザーにPFRelationコードを追加して、修正を作成しようとしました。user2 を参照してください:

  PFRelation *friendsRelation = [self.currentUser relationforKey:@"friendsRelation"];
    PFUser *user = [self.allUsersInParse objectAtIndex:indexPath.row];
    NSLog(@"USER CONTENTS ON BUTTON PRESS: %@", user);
    [friendsRelation addObject:user];

    [self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {

        if(error) {

            NSLog(@"%@ %@", error, [error userInfo]);

        }


    PFUser *user2 = [self.allUsersInParse objectAtIndex:indexPath.row];


    PFRelation *friendsRelation2 = [user2 relationforKey:@"friendsRelation"];


    [friendsRelation2 addObject:self.currentUser];

    [user2 saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error2) {

        if(error2) {

            NSLog(@"%@ %@", error2, [error2 userInfo]);

        }


    }];

このコードは技術的には正しいですが、現在は許可されています。Parse はコンソールにエラーを出力し、基本的に、ログインまたはサインアップによって認証されていないユーザーの PFRelation を追加することは許可されていないことを示します。

どうすればこれを機能させることができるかについて誰かアイデアがありますか?

私が考えた唯一のことは、追加された友人がアプリにログインしたときに、オブジェクト ID を含むデータベース内の friendsRelation オブジェクトを Parse に照会し、見つかった場合は、現在の新しい PFRelation を作成できるということです。ログインしたユーザー。

しかし、これはデータベース全体をスキャンする必要があり、データベースが大きくなるにつれて遅くなる非効率的な修正のように思えます.

助けてくれてありがとう。

4

1 に答える 1

2

現在のユーザーではないユーザーのデータを変更する必要がある場合は、Parse.Cloud.useMasterKey(); で CodeCloud 関数を使用する必要があります。そうすれば、すべての ACL がバイパスされます。

于 2014-04-26T00:20:08.060 に答える