所以我有一個基於視圖的NSTableView連接到一個數組。表視圖最初有2個項目,但是當我嘗試使用IBAction添加對象時,在表視圖請求該行的視圖時,該對象以某種方式在tableView:viewForTableColumn:row:
的最後一次迭代過程中消失。下面的代碼:對象消失在NSMutableArray用於基於視圖的NSTableView
-(IBAction)addTask:(id)sender
{
NSString *task = @"New";
[todaysTasks addObject:task];
[tableView reloadData];
}
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
return todaysTasks.count;
}
-(NSView *)tableView:(NSTableView *)tv viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSTableCellView *cellView = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
NSLog (@"%@", todaysTasks);
TDTodaysTask *task = [todaysTasks objectAtIndex:row];
[cellView.textField setStringValue:task.taskName];
return cellView;
}
產生與
2014-06-19 16:59:35.211 Today[4513:303] (
Test,
Test,
New
)
2014-06-19 16:59:35.212 Today[4513:303] (
Test,
Test,
New
)
2014-06-19 16:59:35.214 Today[4513:303] (
Test,
Test //"New" somehow disappears for no reason
)
2014-06-19 16:59:35.215 Today[4513:303] *** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]
日誌,當我使用addTask:
這是沒有意義的我,因爲我沒有使用removeObjectAtIndex:
都在我的項目。如果我嘗試在addTask:
中添加2個對象,則前2個NSLog生成正確的輸出,但最後一個仍然只輸出2個結果。更詳細的內存地址分析顯示,最後一個日誌的內存地址比以前的日誌要多得多,如下所示。
2014-06-19 17:07:11.205 Today[4590:303] 0x60800024b5b0
2014-06-19 17:07:11.205 Today[4590:303] 0x60800024b5b0
2014-06-19 17:07:11.207 Today[4590:303] 0x60800024a260 //Address changes but I have not changed the array at all
我絕對不知道爲什麼會這樣,所以如果任何人有任何想法,爲什麼這種情況正在發生,將是巨大的。
顯示'numberOfRowsInTableView:'的實現。 – trojanfoe
我懷疑問題是使用常量'NSString * task = @「New」;'。試試:'NSString * task = [NSString stringWithFormat:@「%@」,@「New」];'告訴我是否有區別。 – trojanfoe
@trojanfoe將它添加到上面的代碼中。奇怪的是,它顯示在我添加對象後數組中有3個項目,但是當它詢問表格視圖中的最後一個項目時NSLog告訴我只有2個項目 – TheAmateurProgrammer