Сохранить изображения в фотобиблиотеке, но иногда не может работать правильно

Я использовал приведенные ниже коды для сохранения изображений в библиотеку фотографий

 for(int i=0;i<[imageNameArray count];i++)
{


    NSMutableString *sss=[[NSMutableString  alloc] initWithString: myAppPath];
    [sss appendString:@"/"] ;
    [sss appendString: [NSString stringWithFormat:@"%@",[imageNameArray objectAtIndex:i]  ] ] ;
    UIImage *image = [[[UIImage alloc] initWithContentsOfFile:sss]autorelease];
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    [sss release];

}

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

Есть кто-нибудь встречал такую ​​же проблему?

Приветствую любой комментарий

Спасибо

InterDev

1 ответ

Решение

Возможно, проблема заключается в том, что вы сохраняете изображения в быстрой последовательности, и в результате вызовы сохранения пересекаются. (Запись изображения на диск занимает больше времени, чем для возврата из функции).

Насколько я понимаю, функция сохранения изображения является асинхронной и позволяет регистрировать делегат / обратный вызов (в местах, где вы передаете ноль).

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

Вы можете спроектировать это, используя делегат и обратные вызовы. Чтобы было удобнее для пользователей и дать им представление о том, что происходит, вы можете отобразить индикатор выполнения и другую информацию, такую ​​как "1/3 сохраненных изображения" и т. Д.

Редактировать:

Для лучшего контекста я посмотрел документацию:

UIImageWriteToSavedPhotosAlbum функция объявлена ​​как таковая:

void UIImageWriteToSavedPhotosAlbum (
   UIImage  *image,
   id       completionTarget,
   SEL      completionSelector,
   void     *contextInfo
);

Вы должны установить completionTarget (вероятнее всего self) и completionSelector которая должна иметь следующую подпись:

- (void)               image: (UIImage *) image
    didFinishSavingWithError: (NSError *) error
                 contextInfo: (void *) contextInfo;

В селекторе завершения вы можете выполнить логику того, нужно ли вам выполнить другое сохранение, и обновить свой пользовательский интерфейс "Ход выполнения".

Другие вопросы по тегам