UIImageWriteToSavedPhotosAlbum работает ... иногда

UIImageWriteToSavedPhotosAlbum работает только иногда. Иногда это работает, иногда нет, точно такая же функция.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
NSLog(@"Saving image to camera roll...");
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
NSLog(@"Done!"); }

Я использую контроллер UIImagePicker, чтобы получить изображение, которое затем вызывает эту функцию.

Иногда он сохраняет его в рулон камеры, а иногда просто нет.

У кого-нибудь есть идеи?

Заранее спасибо.

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

Метод завершения для UIImageWriteToSavedPhotosAlbum иногда возвращает ошибку:

wait_fences: failed to receive reply: 10004003
вопрос задан 10.06.2010
EduAlm
475 репутация

2 ответов


  • 17 рейтинг

    Надеюсь, что этот ответ не слишком поздно, чтобы быть полезным. Я столкнулся с точно такой же проблемой. Как оказалось, проблема двоякая. Во-первых, изображение необходимо сохранить перед отправкой в ​​UIImageWriteToSavedPhotosAlbum. Во-вторых, на устройствах до iPhone4 эта функция может занять много времени. Исправление, которое я нашел, заключалось в реализации функции обратного вызова. Об этом см. Документацию для UIImageWriteToSavedPhotosAlbum. Функция должна быть в правильном формате, вы не можете просто использовать любую старую функцию. В этой функции обязательно освободите изображение, которое вы сохранили, иначе у вас будет утечка памяти. Вы также можете использовать это для отслеживания того, когда изображения будут сохранены. Вот мой основной код ниже:

        -(void)processImage:(UIImage *)image {
            [image retain];
            UIImageWriteToSavedPhotosAlbum(reconstructedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
    }
    
    
        - (void)image:(UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
            NSLog(@"SAVE IMAGE COMPLETE");
            if(error != nil) {
                NSLog(@"ERROR SAVING:%@",[error localizedDescription]);
            }
            [image autorelease];
        }
    
    ответ дан Dancreek, с репутацией 8806, 7.07.2010
  • 0 рейтинг

    Я бы начал с добавления целевого метода завершения к вызову сохранения, чтобы узнать, не вызывает ли он каких-либо ошибок. Подробности см. В документации UIImageWriteToSavedPhotosAlbum.

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

    Один раз он вернулся. , , wait_fences: не удалось получить ответ: 10004003

    Это означает, что время операции истекло. Есть много причин этого:

    1. Недостаточно памяти: поместите журнал в didReceiveMemoryWarning, чтобы узнать, является ли это причиной.
    2. Поврежденные файлы, которые система не может сохранить. Если изображение генерируется каждый раз, оно может каждый раз получаться неправильным.
    3. Неправильно сообщена ошибка переполнения диска.

    Я думаю (1), скорее всего, и объясняет прерывистый характер. Когда у вас достаточно памяти, метод работает, а когда нет - не работает.

    Кроме того, при компиляции разрешите все появляющиеся предупреждения. Это просто ошибки, которые не будут отображаться до времени выполнения. Ваша проблема может быть указана там

    ответ дан TechZen, с репутацией 61227, 10.06.2010