2016-09-07 5 views
0

Я пытаюсь загрузить и сохранить изображение из webURL в каталог документов.
Вот мой код для этого.Загруженные изображения имеют нулевые байты в каталоге документов

-(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 изображения правильный Я также могу проверить из веб-браузера. Я не знаю, где ошибка в моем коде.
Не могли бы вы помочь мне решить эту проблему?
Заранее спасибо.

ответ

1

dataWithContentsOfURL не загружен: asynchronously с сервера. теперь, если размер изображения достаточно велик, для загрузки требуется некоторое время. и вы прямо пытаетесь сохранить изображение в каталоге документов. Я думаю, что создать проблему. вы должны использовать NSUrlSession для получения изображения, и вы должны записать данные в локальный хранилище, например каталог документов, из обработчика завершения вызова NSUrlSession. вы можете использовать AFNetworking также для управления подобными вещами.

Вторая вещь использование

[data writeToFile:path atomically:NO]; 

для хранения данных в документ каталог и путь является окончательным и путь должен быть уникальным для различных данных.

1

[NSData dataWithContentsOfURL] не асинхронно метод

при отладке вы код вы найдете imagedata будет ноль

вы должны сначала получить ImageData затем сохранить его

вы можете использовать AFNetworing, SDWebImage рамки или просто используйте NSURLSession скачать

вот мое собственное решение

[[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]; } }];

хороший день :)

Смежные вопросы