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);