NSImageView не работает?

#objective-c #cocoa #nsview #nsimageview

#objective-c #cocoa #nsview #nsimageview

Вопрос:

Я пытаюсь поместить изображение в представление. Это мой код:

 NSImageView *imView = [[NSImageView alloc] initWithFrame:NSMakeRect(0, 0, 480, 360)];
    NSImage *myImage = [[NSImage alloc] initByReferencingFile:@"image.png"];
    [imView setImage:myImage];
    [theView addSubview:imView];
    [window setContentView:theView];
  

Но окно пустое (изображение не отрисовывается). Например, если я помещаю текстовое поле в представление .. оно работает отлично, но не NSImageView…Я проверил консоль, и там нет предупреждений / сообщений об ошибках…
Спасибо!

Комментарии:

1. Проверьте, является ли myImage допустимым: NSLog(@"image is valid? %@", [imView isValid] ? @"yes" : @"no");

2. Кроме того, вы допускаете утечку как imView , так и myImage в этом фрагменте кода.

3. Спасибо за информацию. Вы правы, это недопустимо. Что может быть не так? Еще раз спасибо.

4. Да, я знаю об утечках, я просто пытаюсь узнать, как поместить изображение в nsview, я могу небрежно относиться к памяти прямо сейчас, это фиктивный проект, который я создал просто для тестирования … хотя спасибо.

5. Скорее всего, Cocoa не находит этот файл. Попробуйте использовать imageNamed: вместо этого. Где находится этот файл?

Ответ №1:

Поскольку [imView isValid] возвращает false, это означает, что NSImage не удалось создать изображение на основе этого файла. Распространенной причиной является то, что файл не удалось найти. Из документации -initByReferencingFile: ,

filename Полное или относительное имя пути, указывающее файл с требуемыми данными изображения. Относительные пути должны быть относительно текущего рабочего каталога.

Это означает, что поведение -initByReferencingFile: зависит от текущего каталога, и в идеале вы должны передать полное имя пути.

Лучшим решением является использование imageNamed: вместо этого по двум причинам: он использует кэш изображений и способен искать файл внутри пакета приложений.