Я пишу простое приложение для художника, который хочет рекламировать свои работы в iTunes.
Поскольку существует только двенадцать изображений, которые можно удалить быстрее, чем они могут быть выбраны из средства выбора изображений, пользователь не выбирает изображения по отдельности. Вместо этого изображения программно копируются из комплекта приложения в библиотеку фотографий. Это минимизирует размер и сложность приложения и избавляет конечного пользователя от необходимости выбирать каждое изображение отдельно.
Примечание. Эта проблема возникает только на физическом устройстве (iPhone 3Gs / 3.1).
Не удивительно, что моя реализация включает вызов UIImageWriteToSavedPhotosAlbum внутри цикла, который перебирает массив из 12 полных путей к соответствующим файлам изображений (все являются JPEG). Минус детали (например, проверка ошибок, регистрация, необязательные параметры обратного вызова),
цикл сводится к:
for ( NSString* path in paths ) {
image = [UIImage imageWithContentsOfFile:path];
if (image) {
[NSThread sleepForTimeInterval:1.0]; // unacceptable
UIImageWriteToSavedPhotosAlbum(image, ...);
}
}
Обратите внимание на строку с пометкой «неприемлемо». Почему текущий поток должен спать в течение полной секунды перед каждым вызовом UIImageWriteToSavedPhotosAlbum (image, ...)? Ну, потому что это буквально то, сколько времени требуется iPhoneOS 3.1 (работающему на моем устройстве 3Gs), чтобы приступить к реальной записи буферизованного объекта UIImage в постоянное хранилище, представляющее библиотеку фотографий пользователя! Откуда я это знаю? Что ж, потому что без вызова NSThread sleepForTimeInterval: ни о какой ошибке не сообщалось, даже если только часть из 12 изображений (которые, кажется, изменяются случайным образом между 1 и 9) фактически копируются в библиотеку фотографий. Кроме того, результаты улучшаются с увеличением интервала сна, но, как я обнаружил, интервал должен быть значительно увеличен, прежде чем улучшение станет заметным. Даже при таком высоком значении, как 0,8 секунды, я наблюдал отсутствие файлов после повторных испытаний. За 1 секунду я наблюдал до трех последовательных «правильных» запусков, при которых все файлы полностью передавались, прежде чем терял терпение.
Я погуглил этот вопрос до смерти, проверил все публикации на этой доске, где упоминается UIImageWriteToSavedPhotosAlbum, и ничего не нашел. Я единственный человек в мире, который когда-либо вызывал эту функцию внутри цикла? Есть ли какая-то причина, по которой мне должно быть очевидно, что я не должен этого делать?