QLPreviewRequestSetDataRepresentation, похоже, не работает при передаче изображения [duplicate]

Мой генератор быстрого поиска работал правильно, но теперь он сломан. Это ошибка, или я делаю что-то неправильно?

Вот мой код:

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

Мой документ - обычный 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).

Другие моменты, которые следует учитывать: Состояние документов: «Двоичный генератор Quick Look должен быть универсальным и должен быть только 32-разрядным». Эта страница Но на этой странице говорится: «Для OS X v10.6 и более поздних версий вы должны создавать генераторы Quick Look для 32- и 64-разрядных». Что довольно неясно ... Как установить свою цель?

5
задан wdyp 3 July 2014 в 15:00
поделиться

1 ответ

Опираясь на ту же проблему, я решил пойти альтернативным путем: используйте 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);

По крайней мере, это работает ...

3
ответ дан Guy Moreillon 22 August 2018 в 04:06
поделиться
  • 1
    Спасибо! Я не знаю, как это сделать с QLPreviewRequestCreateContext. Не могли бы вы разместить какой-то код? Я бы назвал это хорошим ответом на мой вопрос! Благодаря! – wdyp 11 October 2014 в 09:38
  • 2
    Я добавил образец кода в свой ответ выше, надеюсь, что это поможет – Guy Moreillon 11 October 2014 в 21:39
  • 3
    Спасибо, что поделились! Поэтому я попробовал, и я получаю эту ошибку ... & lt; Ошибка & gt ;: CGContextDrawImage: недопустимый контекст 0x0. Это серьезная ошибка. Это приложение или используемая им библиотека использует недопустимый контекст и тем самым способствует общему ухудшению стабильности и надежности системы. Это уведомление является любезностью: устраните эту проблему. Это станет фатальной ошибкой в ​​предстоящем обновлении. [ПРЕДУПРЕЖДЕНИЕ] Сконфигурирование предварительного просмотра для & lt; file & gt; в то время как контекста не было создано – wdyp 11 October 2014 в 22:45
  • 4
    Возможно, я не создал изображение правильно из своих NSData ... Вот как я это сделал: CFDataRef imgData = (__bridge CFDataRef)pngData; CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData (imgData); CGImageRef image = CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault); – wdyp 11 October 2014 в 22:48
  • 5
    – Guy Moreillon 12 October 2014 в 13:36
Другие вопросы по тегам:

Похожие вопросы: