2012-04-02 5 views
0

У меня есть следующий код для создания моего окна, моего представления и моего подвид программного обеспечения. Проблема заключается в моем подсмотре «filterView2», когда он добавлен [filterView addSubview:filterView2]; сбоев в этой строке. Есть ли что-то, что я забыл включить или сделал не так? благодаря!Make View and Sub View Programmatically

NSRect mainFrame = [[NSScreen mainScreen] frame]; 
    NSRect helpFrame = NSZeroRect; 
    float width = 600; 
    float height = 400; 
    helpFrame.origin.x = (mainFrame.size.width - width)/2.0; 
    helpFrame.origin.y = 260.0; 
    helpFrame.size.width = width; 
    helpFrame.size.height = height; 

    helpWindow2 = [[BrightnessView windowWithFrame:helpFrame] retain]; 

    // Configure window. 
    [helpWindow2 setReleasedWhenClosed:YES]; 
    [helpWindow2 setHidesOnDeactivate:NO]; 
    [helpWindow2 setCanHide:NO]; 
    [helpWindow2 setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces]; 
    [helpWindow2 setIgnoresMouseEvents:YES]; 
    [helpWindow2 setBackgroundColor:[NSColor clearColor]]; 
    [helpWindow2 setOpaque:NO]; 


    // Configure contentView. 
    NSView *filterView = [helpWindow2 contentView]; 
    [filterView setWantsLayer:YES]; 
    //add subview 
    NSView *filterView2 = [helpWindow2 contentView]; 
    [filterView addSubview:filterView2]; 

    //CALayer for filterView 
    CALayer *theLayer = [CALayer layer]; 
    theLayer.opacity = 0; 
    [filterView setLayer:theLayer]; 
    CGColorRef bgColor = CGColorCreateGenericRGB(0, 200, 255, 1); 
    theLayer.backgroundColor = bgColor; 
    CGColorRelease(bgColor); 
    theLayer.borderColor = CGColorGetConstantColor(kCGColorWhite); 
    theLayer.cornerRadius = 8.0; 

    float helpOpacity = (([NSApp isActive] ? 1 : 0)); 
    [[[helpWindow2 contentView] layer] setOpacity:helpOpacity]; 


    [window addChildWindow:helpWindow2 ordered:NSWindowAbove]; 
+0

Функция helpWindow2 «contentView», выделяет ли она новую версию представления или по-прежнему сохраняет ее? и о какой катастрофе мы говорим здесь? EXC_BAD_aLLOC? Предоставьте больше информации о сбое и о том, как выглядит функция/свойство/переменная contentView. нужно знать, что это такое – chikuba

+0

EXC_BAD_ACCESS - это сообщение об ошибке, а переменная - это только идентификатор (id) contentView –

+1

, когда вы получаете bad_access, потому что вы пытаетесь получить доступ к тому, что не сохраняется (сохранить счет <1) из-за того, что вы выпустили память (например). в этом случае вам действительно нужно посмотреть на ваш дизайн. должно ли представление быть его собственным подсмотром? на самом деле не подходит для меня, поэтому попробуйте создать новый экземпляр contentView, который вы поместили в свой объект, вы даже можете сделать его копию, чтобы вы ничего не потеряли. – chikuba

ответ

2

filterView Я думаю, что и filterView2 являются тем же объектом, который вызывает исключение. Вы не можете добавить представление в качестве подзадачи самого себя.

+0

Итак, как я могу превратить filterView2 в строго подвью? –

+0

Самый простой способ создания 'NSView' - это вызов [[NSView alloc] initWithFrame: ...]'. Однако, если 'filterView2' является _subclass_' NSView', он может иметь другой назначенный инициализатор. Вы должны знать, какой вид вы хотите использовать 'filterView2'. – Costique