안녕하세요. 최신 프로그램에서 NSTableView를 사용하여 왼쪽에 단어를 표시하고 오른쪽에 단어를 표시합니다. 이러한 단어와 정의는 .plist 파일에서로드되며 응용 프로그램 시작시 테이블보기는이 단어와 정의를로드하고 잘 표시합니다. 내 문제는 사용자가 텍스트 상자 및 단추를 사용하여 단어 및 정의를 추가하려고 할 때 단어가 실제로 .plist에 추가되어 메서드가 잘 실행되고 있음을 의미하지만 테이블 뷰는 새 줄을 표시하지 않습니다. 프로그램을 종료하고 테이블 뷰에 새 행을 다시 열 때까지만. 필자는 테이블보기가 selectedRow 및 dataSource와 같은 다른 메시지를 보내서 제대로 연결되었는지 확인하기 위해 테스트했습니다. 모두 응답으로 돌아 왔으며 적절한 응답이있었습니다. 현재 dataSource 및 델리게이트로 사용되는 클래스는 모든 내 변수 및 사전과 함께 내 주 클래스의 하위 클래스입니다. (나는 가능한 한 작은 클래스를 사용하는 데 큰 도움이된다.) 마지막으로 reloadData 전에 noteNumberOfRowsChanged를 삽입하려고 시도했지만 여전히 아무것도 삽입하지 않았습니다.NSTableView가 다시로드되지 않습니다.
나는 모든 것을 테스트했으며 reloadData 메소드가 아무 것도 시작하지 않은 것으로 보입니다. 내가 말했듯이, 내 테이블 뷰 메시지를 보냈고, 새로운 정보가 실제로 dicitinoary adn 배열에 추가되고, 행의 개수가 count 메소드에 의해 업데이트되고, 무엇이 더 많은 것을 증명하는지는 프로그램이 다시 시작하면 모든 것이 잘 표시됩니다. 아래는 관련 코드입니다. currentWordList 및 currentDefitionList는 dataSource에 데이터를 제공하는 Array 및 Dictionary이고 editLibraryCardList는 다시로드하려고하는 NSTableView입니다.
데이터 소스 클래스 코드 : 목록에 단어를 추가
@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];
}
Iv'e 며칠 동안 갇혀와 어떤 아이디어가 도움이됩니다! 감사. 자크
"가능한 한 작은 수업을 사용하는 데는 큰 편"이것은 iOS 프로젝트를 유지 관리하는 악몽이 될 것입니다. iOS 프레임 워크는 많은 집중 클래스를 갖도록 고안되었습니다. 가능한 한 적은 클래스로 모든 것을 밀어 넣으려고 노력하면 모든 단계에서 프레임 워크와 싸우고 불필요한 골치 거리가 될 것입니다. 싸우지 마라. – kubi