Реализация ALAssetsLibrary внутри блока вызывает плохой доступ
Я преобразовал свой проект в arc, и теперь он выдает ошибку неверного доступа при создании новой библиотеки ресурсов. До 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 ответа
Решение
Иногда жизнь может быть такой тяжелой. До ARC мне не нужно было сохранять CFDictionaryRef. Поэтому добавление CFRetain(вложений); после инициализации вложений удалил плохой доступ.
Ура, ванна
Помните, что вам следует инициализировать библиотеку активов только один раз в течение всего жизненного цикла приложения. Таким образом, вы должны, например, сделать это в appdelegate или другом синглтоне. В вашем коде, по-видимому, есть риск, что библиотека ресурсов будет инициализирована несколько раз.
Ура,
Хендрик