2012-08-27 92 views
2

我有我的自定義UIButton類中的UIImageView和UILabel。UIImageView/UILabel屬性總是爲零,直接分配和分配

但是,如果我有如下代碼

self.productImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; 
self.productName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];  

的self.productImage和self.productName永遠是零轉讓之後。

如果我使用一個臨時變量,然後分配給屬性,它工作得很好:

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; 
self.productImage = imgView; 
UILabel *name = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 20)]; 
self.productName = name; 

我新的Objective-C和我不知道這有什麼錯在第一次使用。任何建議,將不勝感激!

+0

你在哪裏初始化標籤和形象?鑑於沒有加載? –

+0

是的。它在viewDidLoad方法中 – xxris

回答

1

從您的描述中可以看出您正在使用ARC,並且這兩個屬性/實例變量被聲明爲weak(或__weak)。這就是爲什麼強大的局部變量會隱含地阻止對象被提前釋放。

由於您的自定義按鈕計劃保留圖片和標籤,因此您應通過從其聲明中刪除weak來製作屬性/實例變量strong

+0

你是對的!我將「弱」改爲「強」,現在它完美了! – xxris

0

試試看:

NSURL *imageurl = [NSURL URLWithString:@"http://www.chakrainteractive.com/mob/ImageUpoad/pic2-2.png"]; 

NSData *imagedata = [[NSData alloc]initWithContentsOfURL:imageurl]; 

UIImage *image = [UIImage imageWithData: imagedata]; 

[logoImg setImage: image]; 
+0

謝謝!我認爲我犯的主要錯誤是使用「弱」而不是「強」財產。 – xxris