2012-01-10 36 views
0

運行NSOpenPanel在文件系統上選擇一個目錄時,我得到一個EXC_BAD_ACCESS。運行NSOpenPanel時EXC_BAD_ACCESS?

的應用程序崩潰,只有當我創建一個新的文件夾(默認「新建文件夾」按鈕),然後我選擇它並打開它(使用默認的「打開」按鈕。

如果我只是打開現有文件夾一切正常。在didEndSelector調用

NSOpenPanel *browsePanel = [[NSOpenPanel alloc] init]; 
    [browsePanel setCanChooseFiles:NO]; 
    [browsePanel setCanChooseDirectories:YES]; 
    [browsePanel setCanCreateDirectories:YES]; 
    [browsePanel beginSheetForDirectory:nil 
            file:nil 
            types:nil 
         modalForWindow:self.window 
          modalDelegate:self 
         didEndSelector:@selector(browsePanelPanelDidEnd:returnCode:contextInfo:) 
          contextInfo:[NSNumber numberWithInteger:[sender tag]]]; 

應用崩潰之前。

感謝

PS。我已經試過設置contextIn無論如何,它會崩潰。

+0

你的「browsePanelPanelDidEnd:returnCode:contextInfo:」方法是什麼樣的?什麼是堆棧跟蹤? – 2012-01-10 08:34:31

+0

是browsePanelPanelDidEnd:returnCode:contextInfo:正在調用? – 2012-01-10 09:18:29

+0

@Mark F我在問題中寫到browsePanelPanelDidEnd:returnCode:contextInfo:在崩潰之前未被調用。 – aneuryzm 2012-01-10 09:28:03

回答

0

這通常發生是因爲您要將消息發送到釋放對象。也被稱爲殭屍。有兩件事你可以做,首先運行NSZombieEnabled = YES的應用程序,或者其次運行樂器和尋找殭屍。我會建議使用儀器,因爲它提供最佳反饋,並允許您瀏覽數據。

啓用殭屍檢測將顯示哪個對象正在發送消息,並允許您追查爲什麼要發送消息或爲什麼要釋放您想要的東西。

你上面的代碼是不夠詳細瞭解這一點。殭屍在代碼的完全不同部分並不罕見,因爲它全部是關於釋放的實例。你可能在別處做過的事情。

相關問題