我的快速生成器用于正常工作但现在已损坏 这是一个错误还是我做错了什么?
这是我的代码:
OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options) { NSDictionary * myDoc = [NSDictionary dictionaryWithContentsOfURL:(NSURL *)url]; if (myDoc) { NSData * pngData = [myDoc valueForKey:@"pngPreview"]; if (pngData) { QLPreviewRequestSetDataRepresentation(preview,(__bridge CFDataRef)pngData, kUTTypeImage,NULL); } } }
我的doc是一个普通的plist,其中png预览存储为数据 我检查了pngPreview确实包含png数据,我创建了图像,其大小为350×350。
但是,我经常遇到这些错误:
qlmanage[702] : CGImageCreate: invalid image size: 0 x 0.
qlmanage[702:303] *** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x9e27, name = 'com.apple.tsm.portname' See /usr/include/servers/bootstrap_defs.h for the error codes.
qlmanage[702:303] *** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x3f2b, name = 'com.apple.CFPasteboardClient' See /usr/include/servers/bootstrap_defs.h for the error codes.
qlmanage[702:303] Failed to allocate communication port for com.apple.CFPasteboardClient; this is likely due to sandbox restrictions
我的应用程序没有沙盒,所以我认为最后3个错误并不重要。
我曾经使用kUTTypePNG,但尝试过kUTTypeImage无效(QLPreviewRequestSetDataRepresentation的文档说当前支持的UTI是kUTTypeImage,kUTTypePDF,kUTTypeHTML,kUTTypeXML,kUTTypePlainText,kUTTypeRTF,kUTTypeMovie和kUTTypeAudio)。
其他要考虑的要点:
文档说明:
“快速查看生成器的二进制文件必须是通用的,并且必须是32位的。” This page
但是this page说:
“对于OS X v10.6及更高版本,您必须为32位和64位构建Quick Look生成器。”哪个相当不清楚...
如何设定目标?
答案 0 :(得分:3)
面对同样的问题,我决定采用另一种方式:使用QLPreviewRequestCreateContext获取绘制图像的上下文:
QLPreviewRequestRef preview; // The preview request passed to GeneratePreviewForURL()
CGImageRef image; // Create your CGImage however you like
CGSize size = CGSizeMake(CGImageGetWidth(image), CGImageGetHeight(image));
CGContextRef ctxt = QLPreviewRequestCreateContext(preview, size, YES, nil);
CGContextDrawImage(ctxt, CGRectMake(0, 0, size.width, size.height), image);
QLPreviewRequestFlushContext(preview, ctxt);
CGContextRelease(ctxt);
至少有效......