Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从外部URL加载方法后继续加载视图_Ios_Objective C - Fatal编程技术网

Ios 从外部URL加载方法后继续加载视图

Ios 从外部URL加载方法后继续加载视图,ios,objective-c,Ios,Objective C,我有一个方法可以从外部url检索数据,从JSON格式将其加载到数组中,并填充UITableView。它工作得很好,但是没有迹象表明用户在下载数据时发生了什么 - (void)viewDidLoad { [super viewDidLoad]; [self retrieveDataC]; } 下面是我为viewDidLoad尝试的代码,它在下载时添加了一个微调器动画。我试图将retrieveDataC放在后台线程上,当它完成时,我希望视图继续执行,就像我没有实现上面示例中的多线

我有一个方法可以从外部url检索数据,从JSON格式将其加载到数组中,并填充UITableView。它工作得很好,但是没有迹象表明用户在下载数据时发生了什么

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self retrieveDataC];

}
下面是我为viewDidLoad尝试的代码,它在下载时添加了一个微调器动画。我试图将
retrieveDataC
放在后台线程上,当它完成时,我希望视图继续执行,就像我没有实现上面示例中的多线程一样

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    spinner.center = CGPointMake(160, 240);
    [self.view addSubview:spinner];
    [spinner startAnimating];

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [self retrieveDataC];
        dispatch_async(dispatch_get_main_queue(), ^{
        [spinner stopAnimating];
        });
    });

}
加载微调器会在短时间内正确显示,但在该过程完成后,我会看到一个空白表,好像我没有调用
[self-retrieveDataC]
。有什么建议吗?我是否正确设置了后台进程

多谢各位

编辑:

这就是最终起作用的原因-

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    spinner.center = CGPointMake(160, 240);
    [self.view addSubview:spinner];
    [spinner startAnimating];

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [self retrieveDataC];
        dispatch_async(dispatch_get_main_queue(), ^{
        [spinner stopAnimating];
        [self.collectionView reloadData];
        });
    });

}

收到数据后是否调用
[self.tableView reloadData]

是。但它是在
retrieveDataC
的末尾。我在
[spinner stop animating]下将其移出成功了。你知道为什么它不能工作吗?因为你应该在主线程(队列)上调用重载数据。阅读本文的更多内容: