0

iPhoneアプリのバックエンド部分に解析を使用しています。

リレーショナルデータで説明されているParseでは、1対多の関係を持つことができます。

このコードは、データを取得するために正常に機能します。

PFQuery *query = [PFQuery queryWithClassName:@"Comment"];
PFObject *fetchedComment = [query getObjectWithId:@"0PprArjYi3"];

NSString *content = [fetchedComment objectForKey:@"content"];
printf("%s", [content UTF8String]);

しかし、リンクで提供されているコードを使用すると、nullが返されます。

PFObject *post = [fetchedComment objectForKey:@"parent"];
[post fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {
          title = [post objectForKey:@"title"];
}];
printf("%s", [title UTF8String]);     // RETURN NULL

このコードの何が問題なのか誰か教えてもらえますか?問題はfetchedcommentである可能性があります


補遺

これも例外があります:

PFQuery *query = [PFQuery queryWithClassName:@"Comment"];
PFObject *fetchedComment = [query getObjectWithId:@"0PprArjYi3"];

PFObject *post = [fetchedComment objectForKey:@"parent"];
NSString *title = [post objectForKey:@"title"];
printf("%s", [title UTF8String]);
4

1 に答える 1

0

この方法fetchIfNeededInBackgroundWithBlockは、その名前が示すように、バックグラウンドで実行されます。コードはフェッチを要求し、すぐにに進みprintfます。その時点では、データはまだフェッチされていないため、titleおそらくまだフェッチされていますnil

2つのオプションがあります-

  1. [parent fetchInBackground ...]の代わりに、[post fetch]:などの同期メソッドを使用します。

    [post fetch];
    title1 = [post objectForKey:@"title"];
    
  2. fetchInBackground...メソッドの終了時に実行されるブロック内にタイトルを出力します。

于 2012-09-23T09:16:39.797 に答える