我的iPhone应用程序使用Web服务来更新tableview,首先将项目保存在核心数据中。
然而,目前,在我相信Core Data中存在数据和在屏幕上刷新tableview之间存在很长的延迟。
在应用程序空白安装的情况下,在微调器停止显示屏幕上的数据后,应用程序屏幕可以保持空白十到十五秒,但是,如果您点击一行,则可以查看项目的详细信息,建议数据存在于核心数据中。类似地,如果您向上和向下滚动,屏幕将开始填充。我的问题是,如何将数据保存到核心数据后如何才能将数据显示在屏幕上?
我尝试将[self.tableView reloadData]
放在所有地方,但它似乎对显示数据的时间表没有影响。唯一有效的是,如果我在调用Web服务后将其放在viewDidLoad中。在这种情况下,每行显示占位符图像,但文本在相同的十到十五秒内不会出现。
以下是进行Web服务调用的viewDidLoad方法。
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.dataSource = self;
self.tableView.delegate = self;
self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
_spinner.center = CGPointMake(160, 200);
_spinner.tag = 1;//todos
[self.tableView addSubview: _spinner];
[self.tableView bringSubviewToFront:_spinner];
_spinner.hidesWhenStopped = YES;
_spinner.hidden = NO;
[_spinner startAnimating];
//GO TO BACKGROUND THREAD FOR SERVER CALL
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL: kServiceURL];
[self fetchServiceData:data];//SYNCING NOW TAKING PLACE
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
[[self.view viewWithTag:1] stopAnimating];
});
});
}
我还在viewWillAppear中放置了self.tableView reloadData但没有成功。
答案 0 :(得分:0)
这只是一个建议
viewWillAppear
很可能在您收到数据之前很久才被调用。因此,添加reloadData
会有所帮助。
有一个名为setNeedsDisplay()的所有UIViews的方法告诉系统该视图需要重绘。我不知道reloadData是自动执行此操作还是需要手动执行此操作。尝试在[self.tableView setNeedsDisplay]
之后添加[self.tableView reloadData]
。