请原谅我花时间,但我花了很多时间尝试了一切在脑海中我在网上找到的东西:/
问题是在向其数组添加1条记录后重新加载NSTableView。我的应用程序从扫描文件目录开始,将其名称和修改日期添加到NSDutaries的NSMuttableArray中。然后将此信息加载到NSTableView,一切正常。 但当我创建新文件并尝试重新加载NStableViev时,我得到了这个:
[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4]
现在我想展示一些我想要做的代码。
所以这是我的表格如何获取数据
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{
NSLog(@"--------->%ld",(long)filesCount);
return filesCount;
}
-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row {
NSDictionary *flag = FilesArray[row];
NSString *identifier = [tableColumn identifier];
if ([identifier isEqualToString:@"filename"]){
NSTableCellView *cellview = [tableView makeViewWithIdentifier:@"filename" owner:self];
[cellview.textField setStringValue:flag[@"name"]];
return cellview;
}else if ([identifier isEqualToString:@"filedate"]){
NSTableCellView *cellview = [tableView makeViewWithIdentifier:@"filedate" owner:self];
[cellview.textField setStringValue:flag[@"date"]];
return cellview;
}
return nil;
}
以及我在创建新文件时如何尝试重新加载数据:
if([identifier isEqualToString:@"newFileModalDone"]){
NSString *newFileName = [self fileNameModalDone];
//creating new file
[TxtFileObj WriteToFile:[newFileName stringByAppendingString:@".txt"] :nil];
//rescaning directory
[TxtFileObj GetFilesList];
FilesArray = [TxtFileObj GetFileArray];
//updating files count
filesCount = [FilesArray count];
[FilesListTable reloadData];
}
我试图多次观看调试器,似乎异常来自
NSDictionary *flag = FilesArray[row];
所以我在制作新电影后想到了错误的阵列尺寸,但我多次检查过,一切都很好。
请帮助我找出我做错了什么,抱歉,如果问题很明显,我对Objective C和COCOA很新。
谢谢你的帮助!
答案 0 :(得分:0)
所以在阅读了一些论坛之后我终于找到了我的错误:)
不确定它是否正确但现在它的工作正常,现在代码如下:
if([identifier isEqualToString:@"newFileModalDone"]){
NSString *newFileName = [self fileNameModalDone];
[FilesListTable beginUpdates];
[TxtFileObj writeToFile:[newFileName stringByAppendingString:@".txt"] :nil];
[TxtFileObj getFilesList];
FilesArray = [TxtFileObj filesListArray];
[FilesListTable insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:[FilesArray count]-1]
withAnimation:NSTableViewAnimationSlideDown];
[FilesListTable endUpdates];
[FilesListTable reloadData];
}
我基本上做的是添加了3种方法:
[FilesListTable beginUpdates];
[FilesListTable insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:[FilesArray count]-1]
withAnimation:NSTableViewAnimationSlideDown];
[FilesListTable endUpdates];