如何强制tableview显示立即从web服务获取的内容?
嗨我的iPhone应用程序用户更新桌面视图的Web服务,首先将项目保存在核心数据。如何强制tableview显示立即从web服务获取的内容?
但是,当我相信数据存在于核心数据中以及桌面视图在屏幕上刷新时,目前存在很长的延迟。
随着应用程序的空白安装,应用程序屏幕可以在微调停止后数据出现在屏幕上10到15秒后保持空白,但是,如果您点击一行,则可以查看项目建议的详细信息数据存在于核心数据中。类似的,如果你上下滚动,屏幕开始填充。我的问题是,如何在数据保存到核心数据后立即让数据显示在屏幕上?
我试过把[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];
});
});
}
我也放置self.tableView reloadData viewWillAppear没有成功。
这仅仅是一个建议
viewWillAppear
是最有可能称为长收到您的数据之前。所以加入reloadData
就没有帮助。
对于所有名为setNeedsDisplay()的UIView都有一种方法,告诉系统该视图需要重绘。我不知道reloadData是自动执行还是需要手动执行。尝试在[self.tableView reloadData]
之后加[self.tableView setNeedsDisplay]
。
有趣的建议。没有改变的事情。奇怪的是,图像立即加载,但不是标签。也许它与tableview委托方法有关 – user6631314
验证你的iboutlets已连接,或者你的init方法设置正确。再次检查cellForRow – Multinerd
fetchServiceData中会发生什么? – trapper