我目前正在制作一个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