如何强制tableview立即显示从Web服务获取的内容?

时间:2016-09-20 21:33:06

标签: ios objective-c core-data tableview

我的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但没有成功。

1 个答案:

答案 0 :(得分:0)

这只是一个建议

viewWillAppear很可能在您收到数据之前很久才被调用。因此,添加reloadData会有所帮助。

有一个名为setNeedsDisplay()的所有UIViews的方法告诉系统该视图需要重绘。我不知道reloadData是自动执行此操作还是需要手动执行此操作。尝试在[self.tableView setNeedsDisplay]之后添加[self.tableView reloadData]