Отображение изображения в cocoa

Я совершенно новичок в этом, но здесь говорится: Я хочу нажать кнопку в своем приложении и отобразить изображение (я планирую прочитать его с камеры, но для начала я открою файл .TIF.) Однако внутри построителя интерфейса я могу сделать кнопки в объекте NSObject, но в литературе звучит так, как будто мне нужно создать объект NSView для отображения файла. Проблема в том, что когда я это делаю, объект NSObject, похоже, не разговаривает с объектом NSView. Я пытаюсь сделать что-то вроде:

    NSString *inFilePath;
    inFilePath = @"/Volumes/Data/Temp/Smiles.tiff";
    NSImage *TestImage = [[NSImage alloc] initWithContentsOfFile:inFilePath];
    [MyView setImage:TestImage];

Здесь MyView является объектом NSView. Я получаю предупреждения о том, что MyView может не отвечать на setImage. Я попытался определить IBOutlet внутри объекта NSObject, и хотя я могу подключить его в построителе интерфейса, консоль дает мне ошибку:

нераспознанный селектор, отправленный в класс 0x1e080

Итак, не ясно, что следующий шаг. Есть ли простой способ заставить два разных объекта "поговорить" друг с другом? Благодаря

Ответ 1

Вам нужен объект NSImageView. В библиотеке Interface Builder это называется Image Well, но вы можете настроить его так, чтобы он не имел рамку.

NSImageView является подклассом NSView, который оптимизирован для отображения изображений.

В файле заголовка (.h) у вас должно быть что-то вроде этого:

 @interface MyController : NSObject
{
    //this declares an outlet so you can hook up the 
    //image view in Interface Builder
    IBOutlet NSImageView* imageView;
}
@end

И в вашем файле реализации (.m):

@implementation MyController

//called once the nib is loaded and all outlets are available
- (void)awakeFromNib
{
    NSString *inFilePath = @"/Volumes/Data/Temp/Smiles.tiff";
    NSImage *testImage = [[NSImage alloc] initWithContentsOfFile:inFilePath];
#if !__has_feature(objc_arc)
  [testImage autorelease];
#endif
    //imageView is your outlet
    [imageView setImage:testImage];
}

@end

В Interface Builder вы должны подключить выход imageView вашего класса, чтобы указать на NSImageView, который вы разместили в своем представлении.