2009-12-08 100 views
1

我無法使用Interface Builder正確初始化我的SubView。我有以下視圖層次結構(UIWindow - > BlankCanvasView - > StalkerView)。 BlankCanvasView是的UIView的子類,StalkerView是BlankCanvasViewSubViews未正確初始化使用IB

的IBOutlet中

@interface BlankCanvasView:UIView的{

IBOutlet UIView *stalker; 

}

@end

我已經建立了跟蹤者之間的連接BlankCanvasView的出口和子視圖。然而,在我的BlankCanvasView的touchesBegin方法中,纏擾者插座是零。請參閱下面的touchesBegin。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

NSLog(@"Touch Begin detected!!!"); 
NSLog(@"Stalker instance %@", stalker); 

[UIView beginAnimations:@"StalkerAnimation" context:nil]; 

UITouch *touch = [touches anyObject]; 

    //stalker is nil here!!! 
[stalker setCenter:[touch previousLocationInView:self]]; 

[UIView commitAnimations]; 

}

我缺少什麼?看起來好像我的演示程序都沒有正確加載任何子視圖,當我嘗試並遵循iTunesU上的示例時。

回答

0

如果你在IB創建你的'潛行者'視圖,它必須是視圖層次結構的一部分(也就是說,作爲另一個視圖的子視圖添加),或者它必須被代碼保留以便它加載後不會被釋放。如果您使用保留屬性你死纏爛打的變量,這將是照顧你的,自動:

@interface BlankCanvasView : UIView 
{ 
    UIView *stalker; 
} 

@property (nonatomic, retain) IBOutlet UIView *stalker; 

@end 

確保您@synthesize死纏爛打;在BlankCanvasView的實現,以及屬性設置爲無,當你重新分配你的觀點:

@implementation BlankCanvasView 
@synthesize stalker; 

- (void)dealloc 
{ 
    self.stalker = nil; 
    [super dealloc]; 
} 

@end 
+0

嗨殺手, 我實際上只有伊娃與保留語義屬性試圖左右逢源。無論哪種情況,該物業或iVar都是零。看看這個主題上的其他類似帖子,我想知道是否需要重寫UIView類的awakeFromNib方法? – lcranf 2009-12-08 16:41:50