2012-06-15 44 views
2

我想在運行時將圖像設置爲我的背景,所以我在Interface Builder中創建了一個UIImageView'backGroundImage'作爲IBOutlet。但是下面的代碼:UIImageView setImage不適用於IBOutlet

UIImage *image = [UIImage imageNamed:imageName]; 
    NSLog(@"image=nil %d",(image ==nil)); 
    NSLog(imageName); 
    [self.backGroundImage setImage:image]; 
    NSLog(@"backgroundImage=nil %d",(self.backGroundImage.image ==nil)); 

給了我下面的NSLogs

2012-06-15 12:09:43.967 iElster[1960:207] image=nil 0 

2012-06-15 12:09:43.967 iElster[1960:207] bedroom-sketch-corel-eps-vector-art-1141.jpg 

2012-06-15 12:09:43.968 iElster[1960:207] backgroundImage=nil 1 

所以基本上我可以載入我的形象,但我不能將其設置爲UIImageView的形象。如果我有以下行

backGroundImage = [[UIImageView alloc]init]; 

我不明白「零」了我的backGroundImage.image - 但在這種情況下,我顯然不使用由出口創造的UIImageView了。我沒有看到上述代碼的問題,特別是因爲我在類似的Stack Overflow線程中看到的所有建議都完全相同:「只需使用setImage方法」;任何想法可能是什麼問題?

PS:只是爲了澄清 - 我嘗試使用不同的圖像,既.png和.jpg,他們都工作,如果我例如只需將它們設置爲我的ScrollView的子視圖,但在上面的代碼中嘗試使用它們時不會。所以圖像文件不應該帶來任何問題。

+1

看起來你忘了在你的代碼中將UIImageView從IB連接到IBOutlet。是這樣嗎? –

+0

我有它正確@synthesized,我沒有連接UIImageView到IBOutlet通過按Ctrl +拖動IB(我實際上雙重檢查這兩種事情之前發佈在這裏幾次的方式) –

+0

嘗試放在以下行:'NSLog(@「 self.backGroundImage is nil:%@「,self.backgroundImage?@」NO「:@」YES「);'並且指示'backGroundImage = [[UIImageView alloc] init];' - 它不應該在那裏。還有一件事:**你在哪種方法中有這樣的代碼?** –

回答

5

看起來您已將此代碼放置在執行之前的視圖被加載並且插座已連接(例如在init...)中。嘗試將它放置在viewDidLoad。在加載視圖之前(即在訪問viewDidLoad之前),您無法訪問您的視圖插座。

而且,這條線:

[image release]; 

是存儲器管理錯誤(overrelease)。

+0

謝謝,解決了它。我確實把它放在init ..方法中,因爲我將「imageName」字符串作爲參數,並且懶得在我的類中創建NSString屬性來存儲該信息。 –

相關問題