2012-12-31 41 views
5

Tôi muốn thêm một NSWindow mã đơn giản là:NSwindow biến mất

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

Và cửa sổ xuất hiện trong một giây rồi biến mất. Có gì sai?

  • Xcode 4.5.2
  • MacBookPro i5 10.8.2

Cám ơn câu trả lời của bạn.

Trả lời

10

Bạn không giữ lại cửa sổ.

Xác định NSWindow* myWindow; bằng .h làm tài sản.


Trong .h

@property (strong)NSWindow* myWindow; 

Trong .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:

Nếu bạn muốn nhiều cửa sổ để mở từ cùng một nút. Tạo một mảng

Trong .h

@property(strong) NSMutableArray *myWindowArray; 

Trong .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:

Tìm application here.

+0

Làm cho "' self.myWindow' "và câu trả lời sẽ tốt hơn nhiều. Ngoài ra, bạn có thể cần phải kiểm tra xem liệu đã có một cửa sổ được gán cho "' self.myWindow' "trước khi tạo một cái mới chưa. –

+0

Chắc chắn ... đang cập nhật :) –

+0

Cảm ơn. Hoạt động hoàn hảo. –