#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:
вместо этого по двум причинам: он использует кэш изображений и способен искать файл внутри пакета приложений.