2013-07-25 66 views
1

爲什麼blackview總是空?使用uiview作爲財產..其空null我在做什麼錯

@property (strong, nonatomic) UIView *blackView; 

[_blackView setFrame:self.view.bounds]; 
[_blackView setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.8]]; 
[self.view addSubview:_blackView]; 
NSLog(@"%@", _blackView); // i get null 

我被實例化它使用的alloc初始化之前,但我需要,所以我使用它作爲一個屬性來訪問方法之間的這種觀點

+0

'_blackView'尚未設置爲一個非空的對象開始與.. – dasblinkenlight

+0

沒有,這是第一次IM引用它.. – hamobi

+1

這是什麼原因呢?你需要初始化'_blackView'變量無論是直接分配還是分配'blackView'屬性,否則它仍然是'nil',並且您調用的所有方法都將被忽略。 – dasblinkenlight

回答

3

嘗試使用self.blackview和初始化

self.blackview = [[UIView alloc] initWithFrame:self.view.frame];

1

在對對象(UIView)做任何事之前。你必須爲它做好準備,並做一些初始化。使用alloc和init方法。像:

UIView *blackView = [[UIView alloc] initWithFrame:CGrectMake(, , ,)]; 
1

我必須說,這是甚至初學者應該知道的東西。

創建屬性後。確保你有合成它。

@synthesize blackView; 

,然後確保你的Alloc一些內存給它ATLEAST,使用

self.blackView = [[UIView alloc]init]; 

然後你就可以在其上執行任何功能,你想要的。

+0

在當前版本的Clang中,屬性會自動合成,除非你自己編寫訪問器。所以你的答案的第一位不再是必要的。 – JeremyP

+0

是的,但我認爲這是一件好事,保持基本正確:) – Hitesh

+0

是的,我不一定認爲汽車合成是一件好事。 – JeremyP

0
@property (strong, nonatomic) UIView *blackView; 

在這裏您取得了decalaration。但這並不意味着您已經爲其分配了任何memory

在你的實現文件中,你需要allocate memory以及initialise。 如果您使用的是XCode版本6及以上版本,則不需要綜合您的屬性,因爲這是由Xcode本身完成的。 否則你需要同步你的財產。

@synthesize blackView; 

self.blackView = [UIView alloc]initWithFrame:self.view.bounds]; 

此外,如果你有一個筆尖文件,有你有alraedy添加一個UiView,你希望它是你的blackView那麼你必須從您榫文件到您的.h文件中的IBoutlet連接。在這種情況下,您不需要initialiseallocate內存到您的UIView對象。這是由iOS SDk本身完成的。