2012-04-03 3 views
0

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

Любые предложения?

[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); 
    } 
}]; 
+0

Иногда жизнь может быть так трудно. Перед ARC мне не пришлось сохранять CFDictionaryRef. Так что добавление 'CFRetain (вложения);' после инициализации вложений удалил плохой доступ. Cheers, – tubtub

+0

Пожалуйста, разместите свое решение вместо ответа: http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – Stefan

ответ

0

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

Приветствия, tubtub

1

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

Приветствия,

Хендрик