2011-01-22 3 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]; 
} 
} 

В Application Init я звоню ShowSubView: 0 и его работает нормально, но зависит от некоторого действия пользователя, я буду называть ShowSubView: 1 и ничего не отображается & EXEC_BAD_ACCESS я мог видеть в БГД
Пожалуйста, руководство меня, мне нужно сделать что-то еще, чтобы отобразить вид

Благодаря

+0

Не пытайтесь вызвать setNeedsDisplay после этого. Кроме того, вы должны использовать YES и NO вместо TRUE и FALSE. Это соглашение, хотя это не имеет большого значения. – Maz

+0

Это 'EXC_BAD_ACCESS', а не' EXEC_BAD_ACCESS'. «EXC» означает «исключение», здесь подразумевается исключение ядра Mach, т. Е. Ваше приложение разбилось. Кроме того, вы можете разделить 'ShowSubview:' на два метода: по одному для каждого представления. Цепочки «если» заявления заставляют меня нервничать; Интересно, какую ветвь или ветви автор (вы) забыли. –

ответ

1

Когда ваше приложение падает, посмотрите в окне отладчика - он скажет вам, что делает ваше приложение, когда оно разбилось.

Возможно, вам захочется остановить отладчик и перезапустить приложение под инструментом Инструмент «Зомби». Когда авария связана с тем, что вы послали мертвый объект (что является причиной, вероятно, 80% времени в Cocoa), инструмент Zombies скажет вам, какой объект был и что его убило.