2011-03-08 65 views
11

我完全是這個新手,但是這裏有: 我想在我的應用程序中按下一個按鈕,並有一個圖像顯示(我打算從照相機中讀取它,但要開始有,我會打開一個.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。我試圖NSObject的對象中定義一個IBOutlet,雖然我可以在界面生成器內連接,系統控制檯給我的錯誤:

無法識別的選擇發送到類0x1e080

因此,目前還不清楚是什麼下一步是。是否有一種簡單的方法可以讓兩個不同的對象「彼此交談」? 感謝

回答

15

你想要一個NSImageView對象。在Interface Builder庫這被稱爲形象好,但可以配置它,使它不具有擋板。

NSImageViewNSView一個子類,其用於顯示圖像進行了優化。

在你的頭文件(.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你放在你的看法。

+2

NSImageView不僅僅是* *優化用於顯示圖像;它顯示它們。 NSView不會;一個NSView,沒有繪製任何東西,沒有畫任何東西。另外,你正在泄漏'testImage'。 – 2011-03-09 01:11:19

+0

謝謝,我修復了漏洞 - 這是由於我複製並粘貼了OP的代碼而未徹底檢查導致的。 – 2011-03-09 01:31:41

+0

謝謝 - 我得到了這件作品。現在我需要進入顯示來自攝像機的流式視頻的下一步... – 2011-03-17 16:10:36

相關問題