1

次の簡単な方法を検討してください。

- (void)connectSpouseToCurrentUser:(PFUser *)spouse completionBlock:(void (^)(NSError *error))completionBlock {
    [PFUser currentUser][@"spouse"] = spouse;        
    [[PFUser currentUser] saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (error) {
            NSLog(@"Error: %@", [error userInfo]);
        }

        spouse[@"spouse"] = [PFUser currentUser];
        [spouse saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
           // This code never executes
            NSLog(@"Error: %@", error);
            self.spouse = spouse;
            if (completionBlock) {
                completionBlock(error);
            }
        }];
    }];
}

何らかの理由で、最新の完了ブロックが呼び出されていません。

なぜこれが起こっているのか誰にも分かりますか?

4

3 に答える 3

0

私は同じ問題を抱えており、解析ヘルパー フォーラムでこのトピックに関する有用なコメントを 1 つだけ見つけました。私はそれを試してみましたが、うまくいきます。https://www.parse.com/questions/saveinbackgroundwithblock-not-being-called-on-1219

したがって、主な問題は、ユーザーから配偶者へのポインターと、配偶者からユーザーへのポインターを作成することです。両方のポインターを使用する方が簡単であることはわかっています。

私の場合、ユーザーとメッセージがあり、すべてのメッセージにはユーザーへのポインターがあり、すべてのユーザーには最後のメッセージへのポインターがあります。最後のものを削除しました。ポインターの代わりに、新しいメッセージが必要なときにパースから最後のメッセージを照会し、それを通常の目的の c プロパティとして保存します。

PFQuery *messageQuery = [Message query];
[messageQuery whereKey:@"owner" equalTo:self.createdBy];
[messageQuery orderByDescending:@"createdAt"];
[messageQuery getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
    if (object && !error)
    self.user.lastMessage = (Message *)object;
}];

これがあなたを助けることを願っています。また、ユーザー解析サブクラス化を強くお勧めします。コーディングがはるかに簡単になり、何をしているかをよく把握できます。

于 2015-02-14T05:51:29.957 に答える