NSImage проблема readFromData - PullRequest
       8

NSImage проблема readFromData

0 голосов
/ 26 декабря 2009

Я пытаюсь создать простое приложение для какао на основе документов, которое может сохранять и загружать изображения в pdf-файлах.

Для сохранения, я использую

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
    return [imageView dataWithPDFInsideRect:[imageView bounds]];
}

И это работает, изображение может быть сохранено в файл PDF.

Для загрузки, я использую

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
    NSData *dataFromFile = [data retain];
    NSImage *image = [[NSImage alloc] initWithData:dataFromFile];
    NSLog(@"Load image as: %@", image);
    // Do something about the image
    if (outError != NULL) {
        NSLog(@"Error when loading data ...");
        *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
        return NO;
    }
    return YES;
}

Это всегда терпит неудачу, но NSLog распечатывает, что изображение не NULL:

Load image as: NSImage 0x16ead890 Size={1023, 601} Reps=(NSPDFImageRep 0x16e97480 Size={1023, 601} ColorSpace=NSCalibrateRGBColorSpace BPS=0 Pixels=1023x601 Alpha=NO)

Error when loading data ...

Я не совсем понимаю, какая проблема возникает в readFromData, который выдает здесь ошибку! = NULL.

Ответы [ 3 ]

1 голос
/ 26 декабря 2009

Ваше изображение успешно создается.

Вы не совсем понимаете, как работает параметр ошибки. Ваш метод -readFromData:ofType:error: получает указатель на указатель, чтобы вы могли использовать , если , вы не можете создать образ из экземпляра NSData.

Вы должны прочитать документацию по NSError, чтобы понять, как создавать и использовать экземпляры NSError.

0 голосов
/ 26 декабря 2009

outError для вас, чтобы установить, если у вас есть ошибка при чтении документа. Он не говорит вам, был ли ваш код сбой или нет. Это как вы говорите звонящему, что пошло не так. [NSImage initWithData:] возвращает nil в случае сбоя, поэтому вам нужно изменить:

if (outError != NULL) {

до:

if (image == NULL) {
0 голосов
/ 26 декабря 2009

Вы передаете ошибку из того, что вызывает - Более того, outError - это указатель на указатель. Что вы должны проверить это:

if (outError != nil && *outError != nil) {...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...