2012-12-31 6 views
5

ich ein NSWindow den einfachen Code hinzufügen möchten ist:NSWindow verschwinden

NSWindow* myWindow; 
myWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(100,100,300,300) 
             styleMask:NSTitledWindowMask 
             backing:NSBackingStoreBuffered 
              defer:NO]; 
[myWindow makeKeyAndOrderFront:nil]; 

und das Fenster erscheint für eine Sekunde, dann verschwindet. Was ist los?

  • Xcode 4.5.2
  • MacBookPro i5 10.8.2

Vielen Dank für Ihre Antwort.

Antwort

10

Sie behalten das Fenster nicht.

Definieren Sie NSWindow* myWindow; in .h als eine Eigenschaft.


In .h

@property (strong)NSWindow* myWindow; 

In .m

- (IBAction)button:(id)sender { 

    if (self.myWindow==nil){ 
     self.myWindow= [[NSWindow alloc] initWithContentRect:NSMakeRect(100,100,300,300) 
               styleMask:NSTitledWindowMask 
               backing:NSBackingStoreBuffered 
                defer:NO]; 
    } 

    [self.myWindow makeKeyAndOrderFront:NSApp]; 

} 

EDIT:

Wenn Sie mehrere Fenster wollen von derselben Taste öffnen. Erstellen Sie ein Array

In .h

@property(strong) NSMutableArray *myWindowArray; 

In .m

- (IBAction)button:(id)sender { 
    self.myWindow= [[NSWindow alloc] initWithContentRect:NSMakeRect(100,100,300,300) 
                styleMask:NSTitledWindowMask 
                backing:NSBackingStoreBuffered 
                 defer:NO]; 


    [self.myWindowArray addObject:self.myWindow]; 

    for (NSWindow *win in self.myWindowArray) { 
     [win makeKeyAndOrderFront:NSApp]; 

    } 
} 

EDIT 2:

die application here finden.

+0

Machen Sie das "' self.myWindow' "und die Antwort wird viel besser sein. Wahrscheinlich müssen Sie auch überprüfen, ob bereits ein Fenster für "self.myWindow" vorhanden ist, bevor Sie ein neues erstellen. –

+0

Sicher ... Aktualisierung :) –

+0

Danke. Funktioniert perfekt. –