Привет, ребята, поэтому в моей новейшей программе я использую 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];
}
Я застрял на несколько дней, и любые идеи помогут!Спасибо.
Зак