2016-09-07 6 views
0

webURLからDocument Directoryにイメージをダウンロードして保存しようとしています。
これは私のコードです。ダウンロードしたイメージのドキュメントディレクトリに0バイトが含まれています

-(void)downloadPersonPhoto:(NSDictionary *)dict 
{ 
    NSString *imageUrlStr=[dict objectForKey:@"personPhoto"]; 
    if ([[dict valueForKey:@"personAvatarStore"] isEqualToString:@"AMAZON"]) 
    { 
     imageUrlStr = [imageUrlStr stringByReplacingOccurrencesOfString:@"original" withString:@"100x100"]; 
    } 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSString *documentsDirectory = [self getDocumentDirectory]; 
    NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"personPhoto"]; 
    if (![fileManager fileExistsAtPath:dataPath]) { 
     [fileManager createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil]; //Create folder 
    } 
    NSString *fullPath = [dataPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",[dict valueForKey:@"personId"]]]; 
    if (![fileManager fileExistsAtPath:fullPath]) { 
     NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrlStr]]; 
     [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; 
     NSLog(@"Avatar Photo stored at: %@", fullPath); 
    } 
} 


「に格納されているアバターの写真が:...」するたびに、コンソールに印刷しようとしているが。しかし、私がそのパスに行き、画像をチェックすると、サイズはゼロバイトになり、プレビューはありません。
画像のwebURLが正しいwebブラウザからも確認できます。 私のコードでどこが間違っているのか分かりません。
これを解決するために私を助けてもらえますか?
ありがとうございます。

答えて

1

dataWithContentsOfURLは、サーバーからダウンロード画像asynchronouslyではありません。イメージサイズが十分大きければ、ダウンロードに時間がかかる。イメージをドキュメントディレクトリに直接格納しようとしています。私は問題を作り出すと思う。イメージを取得するにはNSUrlSessionを使用し、NSUrlSessionメソッド呼び出しの完了ハンドラからドキュメントディレクトリのようなローカルストレージにデータを書き込む必要があります。あなたはAFNetworkingもこの種のodのものを管理するために使用することができます。

第二のものは、ドキュメントディレクトリとパスにデータを保存するために

[data writeToFile:path atomically:NO]; 

を使用し、最終的なパスであり、異なるデータに対して一意である必要があります。

1

[NSData dataWithContentsOfURL]はあなたのコードのデバッグ場合はimagedataあなたが最初にあなたがAFNetworingSDWebImageフレームワークを使用することができます

にそれを保存したり、その後、画像データを取得する必要があります

はnilになりますでしょう非同期メソッド

ではありませんちょうどNSURLSessionをダウンロードしてください。

ここに私の1つの解決策

[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError * error) { //error if (error) { //handle error return; } if (data) { //store imagedata [data writeToFile:filepath atomically:NO]; } }];

良い一日:)

関連する問題