2011-01-22 112 views
0

在我的应用我需要显示和隐藏基于一些用户操作,我已经做了以下的NSView显示和隐藏子视图

在接口定义,有这样的

@interface MyWnd : NSWindowController { 

    MyCustomView1 *pCtmView1; 

    MyCustomView2 *pCtmView2; 
} 

增加的视图在源文件有以下相关的方法

-(void)CreateSubViews{ 

    NSRect subViewRect = [self GetSubViewRect]; 

    pCtmView1 = [[ MyCustomView1 alloc]initWithFrame:subViewRect] 

    pCtmView2 = [[ MyCustomView2 alloc]initWithFrame:subViewRect] 

    initially both view will be hidden 

    [pCtmView1 setHidden:TRUE]; 
    [pCtmView2 setHidden:TRUE]; 

    [[self window] view addSubView:pCtmView1]; 
    [[self window] view addSubView:pCtmView2]; 
} 

-(void)ShowSubView:(int)viewId{ 
    if(viewId == 0){ 
    [pCtmView1 setHidden:FALSE]; 
    [pCtmView1 setNeedDisplay:YES]; 
} 
if(viewId == 1){ 
    [pCtmView2 setHidden:FALSE]; 
    [pCtmView2 setNeedDisplay:YES]; 
} 
} 

在初始化应用我打电话ShowSubView:0和它的做工精细, 而是取决于一些用户操作,我会打电话给ShowSubView:1,并没有什么显示& EXEC_BAD_ACCESS我可以在GDB看到
请指引我,做我需要做更多的事情,以显示视图

感谢

+0

尝试不要在以后调用setNeedsDisplay。此外,您应该使用YES和NO,而不是TRUE和FALSE。这是惯例,但它不应该是真的。 – Maz 2011-01-22 17:02:52

回答

1

当你的应用程序崩溃,看一下Debugger窗口 - 它会告诉你你的应用在崩溃时做了什么。

您可能会想要停止调试器并在乐器的僵尸工具下重新运行您的应用程序。当崩溃是因为你发送了一个死对象(这可能是可可中80%的时间)时,僵尸工具会告诉你那个对象是什么,什么是它。