Сохранить изображения в фотобиблиотеке, но иногда не может работать правильно
Я использовал приведенные ниже коды для сохранения изображений в библиотеку фотографий
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;
В селекторе завершения вы можете выполнить логику того, нужно ли вам выполнить другое сохранение, и обновить свой пользовательский интерфейс "Ход выполнения".