我将项目转换为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);
}
}];
答案 0 :(得分:1)
请注意,您应该只在应用程序的整个生命周期中初始化assetlibrary一次。所以你应该例如在appdelegate或其他单身人士中执行此操作。你的代码似乎有风险资产库被多次初始化。
干杯,
亨德里克
答案 1 :(得分:0)
有时候生活会如此艰难。在ARC之前,我不必保留CFDictionaryRef。所以添加CFRetain(附件);初始化附件后删除了错误的访问权限。
干杯, tubtub