2013-10-02 110 views
1

我希望創建一個沒有完全由NSTextView組成的nib文件的窗口。以編程方式使用NSTextView創建窗口

它應該作爲一個彈出窗口,但仍然是無模式的。

到目前爲止,我有兩個屬性:

@property (strong,nonatomic) NSWindow *consoleWindow; 
@property (strong,nonatomic) NSTextView* textView; 

這裏是我的實現是什麼樣子:

-(void)doubleAction:(NSOutlineView*)sender 
    { 

     if(self.currentLogEntry == nil) 
     { 
      return; 
     } 

     self.consoleWindow = nil; 
     self.textView = nil; 


     NSRect windowRect = NSMakeRect(10.0f, 10.0f, 500.0f, 400.0f); 
     self.consoleWindow = [[NSWindow alloc] initWithContentRect:windowRect 
                  styleMask:(NSResizableWindowMask | NSClosableWindowMask | NSTitledWindowMask) 
                  backing:NSBackingStoreBuffered defer:NO]; 


     self.textView = [[NSTextView alloc] initWithFrame:[[self.consoleWindow contentView] frame]]; 
     [self.textView setString:self.currentLogEntry.value]; 
     [self.consoleWindow setContentView:self.textView]; 


     [self.consoleWindow makeKeyAndOrderFront:nil]; 
     [self.consoleWindow makeFirstResponder:self.textView]; 



     NSLog(@"Double clicked"); 
    } 

事情已經被連接起來,所以我有條目列表,每當我雙擊在一個條目上,所選條目被加載到self.currentLogEntry中,然後這個方法被觸發。它的作品,但如果我關閉窗口,並嘗試打開另一個入口我得到Thread 1:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

我認爲這與窗口沒有正確釋放有關,但我已經嘗試了一些東西,如設置屬性爲零,無論何時程序進入doubleAction(就像你在代碼中看到的那樣),但這沒有幫助。

任何幫助解決這個問題,非常感謝。

+0

什麼你尋找什麼樣的幫助?你有什麼問題? – Abizern

+0

對不起,忘了實際要求任何東西 – Niclassg

+0

如果您不使用筆尖,那麼就沒有必要將該物業設置爲IBOutlet。 – Abizern

回答

0

的soulution是:[self.consoleWindow setReleasedWhenClosed:NO];

以下是完整的代碼是如何結束了是(僅相關部分): .H:

@property (strong,nonatomic) NSWindow *consoleWindow; 
@property (strong,nonatomic) NSTextView* textView; 
@property (strong,nonatomic) NSScrollView* scrollView; 

.M:

-(void)doubleAction:(NSOutlineView*)sender 
    { 

     if(self.currentLogEntry == nil) 
     { 
      return; 
     } 

     self.consoleWindow = nil; 
     self.textView = nil; 
     self.scrollView = nil; 


     NSRect windowRect = NSMakeRect(10.0f, 10.0f, 500.0f, 400.0f); 
     self.consoleWindow = [[NSWindow alloc] initWithContentRect:windowRect 
                  styleMask:(NSResizableWindowMask | NSClosableWindowMask | NSTitledWindowMask) 
                  backing:NSBackingStoreBuffered defer:NO]; 
     [self.consoleWindow setReleasedWhenClosed:NO]; 




     self.scrollView = [[NSScrollView alloc] initWithFrame:[[self.consoleWindow contentView] frame]]; 

     [self.scrollView setBorderType:NSNoBorder]; 
     [self.scrollView setHasVerticalScroller:YES]; 
     [self.scrollView setHasHorizontalScroller:NO]; 
     [self.scrollView setAutoresizingMask:NSViewWidthSizable | 
      NSViewHeightSizable]; 

     NSSize contentSize = [self.scrollView contentSize]; 


     self.textView = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, 
                    contentSize.width, contentSize.height)]; 
     [self.textView setMinSize:NSMakeSize(0.0, contentSize.height)]; 
     [self.textView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)]; 
     [self.textView setVerticallyResizable:YES]; 
     [self.textView setHorizontallyResizable:NO]; 
     [self.textView setAutoresizingMask:NSViewWidthSizable]; 

     [[self.textView textContainer] 
      setContainerSize:NSMakeSize(contentSize.width, FLT_MAX)]; 
     [[self.textView textContainer] setWidthTracksTextView:YES]; 



     [self.textView setString:self.currentLogEntry.value]; 


     [self.scrollView setDocumentView:self.textView]; 
     [self.consoleWindow setContentView:self.scrollView]; 
     [self.consoleWindow makeKeyAndOrderFront:nil]; 
     [self.consoleWindow makeFirstResponder:self.textView]; 



     NSLog(@"Double clicked"); 
    } 
相關問題