Реализация ALAssetsLibrary внутри блока вызывает плохой доступ - PullRequest
0 голосов
/ 03 апреля 2012

Я преобразовал свой проект в дугу, и теперь он выдает ошибку неверного доступа при создании новой библиотеки ресурсов. До ARC проблем не было.

Есть предложения?

[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:stillImageConnection
                                                   completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) 
{
    if (error) {
        NSLog(@"Take picture failed");
    }
    else 
    {
        NSData *jpegData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
        CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, 
                                                                    imageDataSampleBuffer, 
                                                                    kCMAttachmentMode_ShouldPropagate);
        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
        [library writeImageDataToSavedPhotosAlbum:jpegData 
                                         metadata:(__bridge_transfer id)attachments
                                  completionBlock:^(NSURL *assetURL, NSError *error) {
                                      if (error) {
                                          NSLog(@"Save to camera roll failed");
                                      }
                                  }];

        if (attachments)
            CFRelease(attachments);
    }
}];

Ответы [ 2 ]

1 голос
/ 16 мая 2012

Обратите внимание, что вам следует инициализировать библиотеку ресурсов только один раз в течение всего жизненного цикла приложения. Так вы должны, например, Сделайте это в приложении или другом синглтоне. В вашем коде, похоже, есть риск, что библиотека ресурсов будет инициализирована несколько раз.

Приветствия

Хендрик

0 голосов
/ 07 января 2013

Иногда жизнь может быть такой тяжелой. До ARC мне не нужно было сохранять CFDictionaryRef. Поэтому добавление CFRetain (вложений); после инициализации вложений удалил плохой доступ.

Ура, tubtub

...