0

プロジェクトをアークに変換しましたが、新しいアセットライブラリをインスタンス化すると、アクセス不良エラーがスローされます。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);
    }
}];
4

2 に答える 2

1

アプリケーションのライフサイクル全体で、assetlibraryを初期化するのは1回だけであることに注意してください。したがって、たとえば、appdelegateまたは別のシングルトンでそれを行う必要があります。コードには、assetslibraryが複数回初期化されるリスクがあるようです。

乾杯、

ヘンドリック

于 2012-05-16T18:42:08.770 に答える
0

時には人生はとても難しいことがあります。ARCの前は、CFDictionaryRefを保持する必要はありませんでした。したがって、CFRetain(attachments);を追加します。添付ファイルを初期化した後、不正なアクセスを削除しました。

乾杯、浴槽

于 2013-01-06T22:34:45.400 に答える