0

次のコードを使用して、グラフAPIにリクエストを送信し、ラベルに表示します

    [FBRequestConnection startWithGraphPath:@"40123148903?fields=picture" completionHandler:^(FBRequestConnection *connection, id<FBGraphObject> result, NSError *error)
     {
         if(!error)
         {
              self.tryLabal.text = [[[result objectForKey:@"picture"] objectForKey:@"data"]objectForKey:@"url"];

         }
     }
     ];

問題は、ブロック内のグラフオブジェクトしか使用できないことです。返された結果を保持したいと思います。

idプロパティを宣言し、結果IDを割り当ててみました

self.tryGraphObject = result;

ここのメンバーのおかげで、もう少し情報があります。iosfacebook sdk 3.0では、返信が戻ってきたときに呼び出されたfacebookデリゲートを使用したグラフAPI呼び出しの結果を処理しました。3.1では、ロジックが変更され、各リクエストに「完了ハンドラー」と呼ばれるブロックが付属し、結果を処理できるようになりました。問題は、何らかの理由で結果を保存できないため、結果を保存してさらに使用できないことです。

編集:私が間違っていたことが判明しました、問題は異なります。コードを分解したところ、プロパティが設定されていないと思っていましたが、設定されていました。ビューがロードされた直後。基本的に、Facebookからの応答を待っている間、コードを実行し続けました。つまり、値が返される前にビューが読み込まれるため、空のプロパティに基づいてビューが表示されます。私に何ができる?

4

1 に答える 1

-2

ブロックの上で、このように作成したグラフ クラスを宣言できます

__block FBGraphObject *graphObject = self.tryGraphObject;

次に、ブロックでそれをgraphObjectに設定します。それはself.tryGraphObjectを指している必要があり、ブロックに設定すると、できれば設定する必要があります。私はまだこれを完全にテストしていません。

別の可能性はすることです

self.trypGraphObject = [result copy];

そして、私が考えることができる他の唯一のことは、結果オブジェクトがIDであることです。そのため、設定する前に型キャストしてみてください

self.tryGraphObject = (FBGraphObject *)[result copy];

また

FBGraphObject *graph = (FBGraphObject *)result;
self.tryGraphObject = graph;

今思いつくのはそれだけです。これがあなたを正しい方向に導くことを願っています。

于 2012-11-20T15:08:13.233 に答える