我的可可应用需要从网络获取数据,然后在表格视图中显示内容。所以我NSProgressIndicator
在数据下载时添加了一种旋转样式来制作动画。之后动画NSProgressIndicator
停止并重新加载NSTableView
. 奇怪的是表格视图重新加载后,显示的内容没有更新。然后如果你滚动表格视图,内容开始显示,就像:(
上面的小矩形是框架NSProgressIndicator
)
下面是我的代码:
- (void)loadOperationData
{
dispatch_async(dispatch_get_main_queue(), ^{
[self _showIndicator];
});
[NSThread detachNewThreadSelector:@selector(getOperationLogProcess) toTarget:self withObject:nil];
}
- (void)_showIndicator
{
if (indicator == nil)
{
indicator = [[NSProgressIndicator alloc] init];
[indicator setStyle:NSProgressIndicatorSpinningStyle];
[indicator setUsesThreadedAnimation:NO];// I tried to comment this, but no use
int width = 30;
CGRect rect = CGRectMake(0, 0, width, width);
NSRect selfRect = [_coverView frame];
rect.origin.x = selfRect.size.width/2 - width/2;
rect.origin.y = selfRect.size.height/2 - width/2;
indicator.frame = rect;
[_coverView addSubview:indicator];
}
[indicator setHidden:NO];
[indicator startAnimation:self];
}
-(void)getOperationLogProcess{
NSDictionary *tempResutDic = [WebServiceManager getOperationLog];//using synchronous ASIHttpRequest to download data
if ([[tempResutDic objectForKey:@"resultCode"] intValue]==100) {
self.operationLogArray = [tempResutDic objectForKey:@"items"];
[self performSelectorOnMainThread:@selector(reloadTableview) withObject:nil waitUntilDone:YES];//refresh UI in main thread
}
}
-(void)reloadTableview
{
[indicator stopAnimation:self];
[indicator setHidden:YES];
[operationlogTable setEnabled:YES];
if ([_coverView isHidden])
{
return;
}
self.lastUpdateDate = [NSDate date];
[operationlogTable reloadData];
}
由 -(void)loadOperationData
鼠标单击事件调用。而我之所以把它 -(void)_showIndicator
放在一个调度块中是因为指标不能显示。我尝试了很多,最后选择了它。
我猜这个问题与显示指标的方式密切相关,因为如果我评论了有关指标的代码,问题就会消失。
我真的需要这个指标来让用户知道他们正在等待。所以请帮助我如何正确使用 NSProgressIndicator。
谢谢!