0

Core Graphics ライブラリを使用して PDF ファイルを作成すると、奇妙な問題が発生します。

CGContextEndPageメソッドを使用すると、iOS 5.1 以降でのみクラッシュ (EXC_BAD_ACCESS) が発生し、実際の iPhone でテストされています。これはシミュレーターでは発生していません。

私は何が間違っているのでしょうか?

アップデート

PDF メソッドには 300 行以上あります。新しいページを作成するたびに、CGContextBeginPage (pdfContext, &pageRect) を使用します。奇妙なことに、シミュレーターでのテスト中にクラッシュは発生しません。

更新 2

// This code block sets up our PDF Context so that we can draw to it

CGContextRef pdfContext;

CFStringRef path;

CFURLRef url;

CFMutableDictionaryRef myDictionary = NULL;

// Create a CFString from the filename we provide to this method when we call it

path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8);

// Create a CFURL using the CFString we just defined

url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0);

CFRelease (path);

// This dictionary contains extra options mostly for 'signing' the PDF

myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

CFDictionarySetValue(myDictionary, kCGPDFContextTitle, title);

CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("MindScore"));

// Create our PDF Context with the CFURL, the CGRect we provide, and the above defined dictionary

pdfContext = CGPDFContextCreateWithURL (url, &pageRect, myDictionary);

// Cleanup our mess

CFRelease(myDictionary);

CFRelease(url);

for (…) {

/** START NEW PAGE */

    if (…) {

    CGContextEndPage (pdfContext);

    }

    /** START INITIALIZATION OF PAGE*/

    if (…) {

       CGContextBeginPage (pdfContext, &pageRect); 

       // This code block will create an image that we then draw to the page

       const char *picture = "pdf-sheet";

       CGImageRef image;

       CGDataProviderRef provider;

       CFStringRef picturePath;

       CFURLRef pictureURL; 

       picturePath = CFStringCreateWithCString (NULL, picture,

        kCFStringEncodingUTF8);

       pictureURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), picturePath, CFSTR("png"), NULL);

       CFRelease(picturePath);

       provider = CGDataProviderCreateWithURL (pictureURL);

       //CFRelease (pictureURL);

       image = CGImageCreateWithPNGDataProvider (provider, NULL, true, kCGRenderingIntentDefault);

       CGDataProviderRelease (provider);

       CGContextDrawImage (pdfContext, CGRectMake(0, 0, 2480, 3508),image);

       CGImageRelease (image);

       // End image code

    }
}

[...]

/** END LAST PAGE */

NSLog(@"END LAST PAGE");

CGContextEndPage (pdfContext);

CGContextRelease (pdfContext);
4

0 に答える 0