【发布时间】:2011-01-23 02:20:38
【问题描述】:
在我的应用程序中,我需要根据一些用户操作来显示和隐藏,我已经完成了以下操作
在接口定义中,添加了这样的视图
@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 并且没有显示任何内容&
我可以在 gdb 中看到 EXEC_BAD_ACCESS
请指导我,我需要做更多的事情来显示视图
谢谢
【问题讨论】:
-
之后尽量不要调用 setNeedsDisplay。此外,您应该使用 YES 和 NO 而不是 TRUE 和 FALSE。这是约定俗成的,虽然它不应该真的很重要。
-
这是
EXC_BAD_ACCESS,而不是EXEC_BAD_ACCESS。EXC代表“异常”,这里表示 Mach 内核异常——即您的应用程序崩溃了。此外,您可能希望将ShowSubview:拆分为两种方法,一种用于每个视图。一连串的if语句让我紧张;我想知道作者(你)忘记了什么分支或分支。
标签: objective-c cocoa nsview