현재 네트워크 연결에서 메시지를받을 때마다 NSViews 및 NSTableViews를 수정해야하는 코코아 네트워크 클라이언트를 만들고 있습니다.비 그래픽 이벤트 이후보기 새로 고침
연결에서 메시지를 가져올 때마다보기를 새로 고치는 것 외에는 문제가 없습니다. 효과없이 NSTableView에 [tableView reloadData]
을 시도했습니다. [view setNeedsDisplay:YES]
, [view setNeedsDisplayInRect:]
, [itsSuperView setNeedsDisplay:]
을 시도했지만 어느 것도 작동하지 않았습니다.
사용자가 버튼을 클릭 할 때 reloadData
또는 setNeedsDisplay
을 호출하면 개체보기 및 tableView가 올바르게 IB와 연결됩니다. setNeedsDisplay
또는 reloadData
이 GUI에 의해 트리거 된 메소드에서 호출되지 않을 때 쓸모 없다 ...
어떤 힌트가 있습니까? 그것은 ... 어떤 적절한 해결책을 찾지 못하고 감사
--edit
나는이 문제를 데 며칠이되었습니다 : 여기에 코드@implementation myWindowController
- (id)init{
self = [super initWithWindowNibName:@"ListWindow"]; //Form ListWindow.xib
return self;
}
- (void)windowDidLoad
{ [super windowDidLoad];
}
//From button in the GUI
- (IBAction)refresh:(id)sender{
[tableProcessus reloadData]; //Actually refreshes the tableView
}
//Form network
- (void)handleIncomingText:(NSString *)str{
if([str isEqualToString:@"add an item"]){
[glob addItem:3]; //glob is a custom array
[tableProcessus reloadData]; //Does nothing visible (doesn't even trigger numberOfRowsInTableView:)
}
}
#pragma mark tableProcessus Data source
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView{
return [glob numberOfItems];
}
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex{
return [glob itemAtIndex:rowIndex];
}
@end
목적 : 여기
메소드에 대한 링크입니까? 백그라운드 스레드를 사용하고 있습니까? –사실, 나는'reloadData' 메시지를 직접 테이블 뷰로 보낼 것이다. 그리고 메인 스레드 (여기서'[NSThread isMainThread]'return'YES') ... – Daladim
어떤 객체가'reloadData'를 보내고 있습니까? 네트워크 메시지 수신기? 다른 컨트롤러? 이 버튼은 버튼을 눌렀을 때'reloadData'를 보내는 것과 같은 객체입니까? 해당 개체가 네트워크 메시지 수신자를 소유하고 있습니까? 내가 묻는 것은 메시지 수신기 객체와'reloadData' 호출 사이의 관계는 무엇인가? –