3

以下を使用して、ログインしているユーザーのプロフィール写真を表示しようとしています:

    NSLog(@"url is : %@",[SFAccountManager sharedInstance].idData.pictureUrl);
    profilePicData=[NSData dataWithContentsOfURL:[SFAccountManager sharedInstance].idData.pictureUrl];
    if ( profilePicData )
    {
        NSArray       *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString  *documentsDirectory = [paths objectAtIndex:0];

        NSString  *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"filename.jpg"];
        NSLog(@"pic path:  %@",filePath);
        [profilePicData writeToFile:filePath atomically:YES];
    }
    NSLog(@"pic data:  %@",profilePicData);


}

in NSLog("%@", [NSData dataWithContentsOfURL:[SFAccountManager sharedInstance].idData.pictureUrl]); 一部のデータを表示しますが、UIImageView に画像を表示しません。

ヘルプをいただければ幸いです。

4

4 に答える 4

1

最初の Apple のドキュメントでは、ネットワーク呼び出しに dataWithContentsOfURL を使用しないように記載されています。これは同期であるためです。

したがって、代わりに次のようにして画像を取得できます。

SFIdentityData *idData = [SFAccountManager sharedInstance].idData;

if(idData != nil) {
    SFRestRequest *request = [[SFRestRequest alloc] init];
    request.endpoint = [idData.pictureUrl absoluteString];
    request.method = SFRestMethodGET;
    request.path = @"";

    [[SFRestAPI sharedInstance] send:request delegate:_delegate];
}

(これは非同期です。委任の代わりにブロックを使用できます。)

デリゲートでは、(たとえば) 画像を CoreData に保存するか、NSData を UIImage に割り当てることができます。

[[UIImage alloc] initWithData:picData];

また、UIImage が適切に接続されていることを確認する必要もあります。たとえば、IBOutlet である UIImageView を使用する方法があります。

于 2014-03-18T14:15:35.373 に答える