对象消失在NSMutableArray用于基于视图的NSTableView
所以我有一个基于视图的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
我绝对不知道为什么会这样,所以如果任何人有任何想法,为什么这种情况正在发生,将是巨大的。
错误可能在您正在创建新的nsmutablearray(不同的内存地址发现它)的那个控制器的代码中。
或者你可能以某种方式创建一个新的控制器,这就是为什么内存地址改变了?
[“调用makeViewWithIdentifier:owner:使awakeFromNib在您的应用程序中被多次调用,这是因为makeViewWithIdentifier:owner:用传入的所有者加载NIB,并且所有者也收到一个awakeFromNib调用,即使它已经醒了。“](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TableView/PopulatingView-TablesProgrammatically/PopulatingView-TablesProgrammatically.html) – TheAmateurProgrammer
大声笑让这是一个教训我停止滥用'awakeFromNib' – TheAmateurProgrammer
viewDidLoad听起来像是要走的路 – Carlos
显示'numberOfRowsInTableView:'的实现。 – trojanfoe
我怀疑问题是使用常量'NSString * task = @“New”;'。试试:'NSString * task = [NSString stringWithFormat:@“%@”,@“New”];'告诉我是否有区别。 – trojanfoe
@trojanfoe将它添加到上面的代码中。奇怪的是,它显示在我添加对象后数组中有3个项目,但是当它询问表格视图中的最后一个项目时NSLog告诉我只有2个项目 – TheAmateurProgrammer