【问题标题】:NSView showing and hide SubViewNSView 显示和隐藏 SubView
【发布时间】: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_ACCESSEXC 代表“异常”,这里表示 Mach 内核异常——即您的应用程序崩溃了。此外,您可能希望将ShowSubview: 拆分为两种方法,一种用于每个视图。一连串的if 语句让我紧张;我想知道作者(你)忘记了什么分支或分支。

标签: objective-c cocoa nsview


【解决方案1】:

当您的应用崩溃时,请查看“调试器”窗口 - 它会告诉您应用崩溃时正在执行的操作。

您可能希望停止调试器并在 Instruments 的 Zombies 仪器下重新运行您的应用程序。当崩溃是因为您向死对象发送了消息(这可能是 Cocoa 中 80% 的原因),Zombies 工具会告诉您是什么对象以及杀死它的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-21
    • 2017-09-03
    • 2014-07-31
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多