пожалуйста, простите меня за то, что отнял у вас время, но я потратил много времени и перепробовал все, что было в моей голове и что я нашел в Интернете :/
Проблема заключается в перезагрузке NSTableView после добавления 1 записи в его массив. Мое приложение начинается со сканирования каталога на наличие файлов, добавления их имен и дат изменения в NSMuttableArray NSDictionaries. Затем загружаем эту информацию в 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.
Спасибо за помощь!
[TxtFileObj GetFilesList];
методом класса? Это выглядит совсем не так. - person trojanfoe   schedule 19.02.2014return cell view;
не будет компилироваться. - person trojanfoe   schedule 19.02.2014[TxtFileObj GetFilesList];
— это метод экземпляра. Это мой фактический код, и он отлично компилируется. - person MartyMcFly   schedule 19.02.2014return cell view
и странного использования заглавных букв). Не уверен, что предложить, кроме регистрации использованияrow
в ваших делегатах tableview и возврата[FilesArray count]
вnumberOfRowsInTableView:
(нет необходимости вfilesCount
). - person trojanfoe   schedule 19.02.2014return cell view
, это была моя ошибка при вставке кода, на самом деле этоreturn cellview
. - person MartyMcFly   schedule 19.02.2014