在AFNetworking中成功调用后self.tableView reloadData不起作用

Posted

技术标签:

【中文标题】在AFNetworking中成功调用后self.tableView reloadData不起作用【英文标题】:self.tableView reloadData not working after successful call in AFNetworking 【发布时间】:2014-07-24 16:39:51 【问题描述】:

我有一个运行类似于本教程http://www.raywenderlich.com/59255/afnetworking-2-0-tutorialAFHTTPSessionManager 组件的类

但是,[self.tableView reloadData] 对我不起作用。

我的管理器是这样实现的:

-(void) refresh
     manager = [[AFHTTPSessionManager...] iniwithBaseURL:...];
     [manager Get:... parameters:... success:^(NSURLSessionDataTask *task, id responseObject)
         //test success values in responseObject
         if(test)
             //Get table data
             [self.tableView reloadData];
         
     
     ....

但是,如果我之后在单独的函数中运行 [self.tableView reloadData],它就可以正常工作。 为什么会发生这种情况,而不是在教程中应该如何发生?

【问题讨论】:

【参考方案1】:

始终在主队列上重新加载:

dispatch_async(dispatch_get_main_queue(), ^
    [self.tableView reloadData];
);

【讨论】:

我觉得很奇怪,我需要这个来进行 reloadData,但是在另一个 AFHTTPSessionManager 实例中,我有 viewControllers 在成功块中执行 segues,这不是必需的【参考方案2】:

在主队列中写入[self.tableView reloadData];

dispatch_sync(dispatch_get_main_queue(), ^
    [self.tableView reloadData];
);

【讨论】:

不要重复答案。 其实这个是第一位的。所以我给它打勾 没有我的第一,但没关系 别担心,最重要的是你的问题解决了 这不是重复的答案。一个调用dispatch_ASYNC,另一个调用dispatch_SYNC,非常不同。

以上是关于在AFNetworking中成功调用后self.tableView reloadData不起作用的主要内容,如果未能解决你的问题,请参考以下文章

应用程序进入后台后未调用 AFNetworking 成功/失败块

调用 AFNetworking 响应失败块而不是成功块

尽管上传成功,但调用了 AFNetworking 2.0 POST + PHP 阻止失败

Swift:在 AFNetworking 调用中关闭的未包装选项

AFNetworking 同步调用(like/unlike)

AFNetworking 单元测试