0

ユーザーのプロフィール写真を取得する機能を構築しています。Facebook の FBSDKGraphRequest を使用していますが、取得したデータを使用して画像に割り当てようとすると、理解できないエラーが表示されます。Variable is not assignable (missing _block type specifier)

私の機能は以下の通りです:

- (UIImage *)getProfilePicture: (NSString *)ID
{

    FBSDKGraphRequest *requestFriends = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me/friends" parameters:@{@"fields": @"name"}];
    FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init];

    //[connection addRequest:requestFriends completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)

    UIImage* profilePic;


    NSString* requestPath = @"me/?fields=name,location,gender,birthday,relationship_status,picture,email,id";
    FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"picture"}];
    [connection addRequest:request completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError* error)
    {
        NSDictionary* data = (NSDictionary *)result;
        NSDictionary* picture = [data objectForKey:@"picture"];
        NSDictionary* pictureData = [picture objectForKey:@"data"];
        NSString* pictureURL = [pictureData objectForKey:@"url"];
        profilePic = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:pictureURL]]];
    }];

    return profilePic;
}
4

1 に答える 1

2

エラーは、宣言の__block前に追加するように指示しています。profilePic

__block UIImage* profilePic;

それでも、それはあなたの問題を解決しません。

ポイントは、 (完了ブロックを使用した) 呼び出しが非同期-(UIImage *)getProfilePicture: (NSString *)ID であるのに対し、メソッドは同期であるということです。FBSDKGraphRequest

メソッドに UIImage コールバックを追加するか、完了ブロックが Facebook SDK によって呼び出されたときにデリゲート パターンを使用して画像を返すことをお勧めします。

別の解決策ですが、実際には実用的ではありません。呼び出しを完全に同期させると、メソッドFBSDKGraphRequestは完了するまで待機してから UIImage を返しますが、メソッドが実行されているスレッド (おそらくメインスレッド) をブロックします。

于 2015-12-26T22:06:12.093 に答える