2009-12-08 90 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