NSTableView НЕ БУДЕТ ПЕРЕЗАГРУЗИТЬ
Привет, ребята, поэтому в моей новейшей программе я использую NSTableView для отображения слов слева и их определений справа. эти слова и определения загружаются из файла.plist, и при запуске приложения табличное представление загружает эти слова и определения и отображает их очень хорошо. Моя проблема возникает, когда пользователь пытается добавить слово и определение, используя текстовые поля и кнопки, слово фактически добавляется в.plist, что означает, что метод работает нормально, но табличное представление отказывается отображать новую строку. только после того, как я выйду из программы и снова открою ее, табличное представление отобразит новую строку. Я проверил, было ли представление таблицы подключено правильно, отправив ему другие сообщения, такие как selectedRow и dataSource, все вернулись с ответами, и при этом правильно ответили. В настоящее время класс, который используется в качестве источника данных и делегата, является подклассом моего основного класса со всеми моими переменными и словарями. (Я хорошо использую как можно меньше уроков). Наконец, я попытался вставить noteNumberOfRowsChanged перед reloadData, но все еще ничего.
Я проверил все, и кажется, что метод reloadData ничего не инициирует. Как я уже говорил, моему табличному представлению отправляется сообщение, новая информация фактически добавляется в массив adnitinoary adn, количество строк обновляется методом count, и что еще больше доказывает, что когда программа перезапустил все отображает просто отлично. ниже приведен соответствующий код, где currentWordList и currentDefitionList - это массив и словарь, передающий данные в dataSource, а editLibraryCardList - это NSTableView, который я пытаюсь перезагрузить.
код класса dataSource:
@interface EditorDataTable : SAT_Vocab_MacController {
IBOutlet NSTableColumn *editLibraryWordColumn;
IBOutlet NSTableColumn *editLibraryDefinitionColumn;
}
- (int)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row;
@end
@implementation EditorDataTable
- (int)numberOfRowsInTableView:(NSTableView *)tableView {
return ([currentWordList count]);
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row {
if (tableColumn == editLibraryWordColumn) {
return [currentWordList objectAtIndex:row];
}
if (tableColumn == editLibraryDefinitionColumn) {
return [currentDefinitionList valueForKey:[[currentWordList objectAtIndex:row]lowercaseString]];
}
}
@end
метод, который добавляет слово в список:
- (IBAction) editLibraryAddWordToLibrary: (id) sender {
if (self = [super init]) {
currentWordList = [[NSArray alloc] initWithContentsOfFile:userSATWordListPath];
currentDefinitionList = [[NSDictionary alloc] initWithContentsOfFile:userSATDefinitionListPath];
}
[currentWordList addObject:[[editLibraryNewCardWordInput stringValue]capitalizedString]];
[currentDefinitionList setObject:[editLibraryNewCardDefinitionInput stringValue] forKey:[[editLibraryNewCardWordInput stringValue]lowercaseString]];
aWordCounter = [currentWordList indexOfObject:[[editLibraryNewCardWordInput stringValue]capitalizedString]];
[aWordLabel setStringValue: [[NSString alloc] initWithFormat:@"%@", [currentWordList objectAtIndex: aWordCounter]]];
[aDefinitionLabel setStringValue: [[NSString alloc] initWithFormat:@""]];
[currentWordList writeToFile:userSATWordListPath atomically:YES];
[currentDefinitionList writeToFile:userSATDefinitionListPath atomically:YES];
[cardCountdownNumber setStringValue: [[NSString alloc] initWithFormat:@"%i", ([currentWordList count] - (1 + aWordCounter))]];
[editLibraryCardList noteNumberOfRowsChanged];
[editLibraryCardList reloadData];
}
Я застрял на несколько дней, и любые идеи помогут! Благодарю.
Zach
2 ответа
Для тех, кому интересно, я переместил свой код из подкласса dataSource в основной класс, и это сработало. Я полагаю, вы не можете создать подкласс dataSource. Надеюсь это поможет!
Вы пробовали отладку в свой метод selectRowAtIndexPath, чтобы убедиться, что перезагрузка происходит? (после вызова [tableView reloadData] должно быть видно это) Используете ли вы UITableViewController?
Если вы хотите, чтобы обратный вызов после перезагрузки знал, когда это будет сделано, вы можете попробовать:
[tableView reloadData];
[self performSelector:@selector(selectRowAtIndexPath:) withObject:indexPath afterDelay:0.0];