我目前正在製作一個Cocoa網絡客戶端,當它從網絡連接中收到一些消息時,它應該修改一些NSViews和NSTableViews。非圖形事件後刷新視圖
每當它從連接中獲取消息時,它都會很好,除了刷新視圖。 我試過[tableView reloadData]
NSTableView沒有效果。 我試過[view setNeedsDisplay:YES]
,[view setNeedsDisplayInRect:]
,[itsSuperView setNeedsDisplay:]
,但他們都沒有工作。
對象視圖和tableView與IB正確鏈接,因爲當用戶單擊按鈕時調用reloadData
或setNeedsDisplay
工作正常。 看起來像setNeedsDisplay
或reloadData
沒有從GUI觸發的方法調用時沒用...
你有任何提示嗎?這是一個對夫婦,我有這個問題幾天都沒找到合適的解決方案... 感謝
- 編輯:這裏是代碼
@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
接收具有出口表視圖的消息的對象?你是否使用後臺線程? – 2011-04-23 17:18:36
實際上,我將'reloadData'消息直接發送到表視圖。並從主線程([NSThread isMainThread]'return'YES')... – Daladim 2011-04-23 18:27:02
哪個對象正在發送'reloadData'?網絡訊息接收器?其他一些控制器?這是否是按下按鈕時發送'reloadData'的對象?該對象是否擁有網絡消息接收器?我問的是,那個消息接收器對象和'reloadData'調用之間的關係是什麼? – 2011-04-23 19:03:38