2011-04-21 52 views
1

我還是真正的新的Objective-C和Cocoa,但我努力學習。我正在創建一個簡單的ToDo管理器,但我不斷收到EXC_BAD_ACCESS崩潰,我不知道爲什麼。崩潰發生在我的main.m文件中「return NSApplicationMain(argc,(const char **)argv);」所以它很難調試。的Objective-C&EXC_BAD_ACCESS

這裏是我的應用程序委託我的實際執行文件。

#import "ToDoAppDelegate.h" 
#import "Task.h" 

@implementation ToDoAppDelegate 

@synthesize textTaskName; 
@synthesize taskDate; 
@synthesize window; 
@synthesize newTaskWindow; 
@synthesize tableView; 
@synthesize arrayController; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    taskArray = [[NSMutableArray alloc] init]; 

    [taskArray retain]; 
} 

- (IBAction)addTaskClick:(id)sender 
{ 
    [NSApp beginSheet:newTaskWindow modalForWindow:window modalDelegate:self didEndSelector:NULL contextInfo:NULL]; 

    [taskDate setDateValue:[NSDate date]]; 
} 

- (IBAction)btnSaveClick:(id)sender 
{ 
    Task *newTask = [[Task alloc] init]; 

    [newTask setTaskName:[textTaskName stringValue]]; 
    [newTask setTaskDueDate:[taskDate dateValue]]; 

    [arrayController addObject:newTask]; 
    [newTask release]; 

    [textTaskName setStringValue:@""]; 

    [NSApp endSheet:newTaskWindow]; 
    [newTaskWindow orderOut:self]; 
} 

- (IBAction)btnCancelClick:(id)sender 
{ 
    [NSApp endSheet:newTaskWindow]; 
    [newTaskWindow orderOut:self]; 
} 

@end 

會發生什麼事是當btnSaveClick方法被調用時,我得到的方法執行完畢後馬上EXC_BAD_ACCESS崩潰。

這裏是崩潰的回溯:

(gdb) bt 
#0 0x00007fff851d212d in objc_msgSend() 
#1 0x00007fff80f9d1e6 in _CFAutoreleasePoolPop() 
#2 0x00007fff809a0fe0 in -[NSAutoreleasePool drain]() 
#3 0x00007fff8780451f in -[NSApplication run]() 
#4 0x00007fff877fd1a8 in NSApplicationMain() 
#5 0x0000000100001a82 in main (argc=1, argv=0x7fff5fbff638) at /Users/mattwise1985/Documents/Development/xCode Projects/ToDo/ToDo/main.m:13 

由於這只是一個測試項目,如果有人想下載它檢查出我有什麼錯了,我不介意。它可以從這裏下載:http://www.narfsoft.com/downloads/ToDo.zip

+2

顯示我們從GDB回溯當你崩潰。 – 2011-04-21 17:00:16

+0

將回溯添加到主帖子。 – QuantumPhysGuy 2011-04-21 17:10:16

回答

0

你確定你設置了arrayController的插座,而且它不是nil

順便說一句:

taskArray = [[NSMutableArray alloc] init]; 

[taskArray retain]; 

你需要釋放你的兩倍數組,因爲你明確地分配之後保留它...

喬納森說,從GDB回溯會讚賞...

+0

我有出口集,它被設置在接口文件:@property(分配)IBOutlet中NSArrayController的* arrayController; – QuantumPhysGuy 2011-04-21 17:11:30

0

發生此問題,因爲你已經設置表視圖列的綁定,但你沒有設置表視圖本身的綁定。

在MainMenu.xib,選擇表視圖並結合其內容(內容表>內容),以陣列控制器,鍵arrangedObjects。當您處理它時,將其選擇索引(表格內容>選擇索引)綁定到陣列控制器,鍵selectionIndexes

+0

這樣做!謝謝! – QuantumPhysGuy 2011-04-24 23:12:16

+0

嗯,我認爲這是做到了。經過更多測試後,它適用於添加第一個項目時。當我嘗試添加另一個項目時,它會使用EXC_BAD_ACCESS再次崩潰 – QuantumPhysGuy 2011-04-25 12:48:27