【问题标题】:AFNetworking + MBProgressHUD unable to update HUD statusAFNetworking + MBProgressHUD 无法更新 HUD 状态
【发布时间】:2014-12-10 08:23:06
【问题描述】:

在我的 viewController 的 viewDidLoad 方法中,我写了这样的内容:

- (void)viewDidLoad {
[super viewDidLoad];

self.hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
self.hud.labelText = @"Loading";
[serverData loadNewsData:self ];
 }

基本上我会展示 HUD 并在另一个类上启动一个方法 loadNewsData,传递 viewController。

另一个类中的方法是这样的:

 -(void)loadNewsData:(LoadViewController*) loadViewController
  {

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:[siteAddress stringByAppendingString:getNewsList] parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {


    loadViewController.hud.detailsLabelText = @"updating news";

    [NewsModel setNewsData:responseObject];
     loadViewController.hud.detailsLabelText = @"Finished";

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

}

当 AFHTTPRequestOperation 的请求开始时,我期待看到 HUD 中的子菜单在“更新新闻”中发生变化。但什么也没有发生。我只是在过程结束时看到完成。这些请求大约需要 10 秒,所以我期待看到“更新新闻”,但什么也没有。 我也尝试这样做:

 dispatch_async(dispatch_get_main_queue(), ^{
       loadViewController.hud.detailsLabelText = @"updating news"; });

认为我必须在 UI 队列中更新一些 UI 内容,但它也不起作用。 我是新手,可能我错过了什么。

感谢任何好的建议。

【问题讨论】:

  • 如果你把“加载”改为“更新新闻”就不会有问题吧?有点“加载”看起来有点多余。
  • 我不会将viewController 传递给serverData 辅助对象。我认为最好在你的 VC 中有一个调用 loadNewsData 的方法并有一个完成块,你可以在其中更新 UI。正如上面的评论,“加载”和“更新新”有什么区别?

标签: ios objective-c afnetworking-2 mbprogresshud


【解决方案1】:

在开始 GET 请求之前尝试移动 loadViewController.hud.detailsLabelText = @"updating news";。如果将其保留在成功块中,您将看不到文本。

【讨论】:

  • 嗨,我真的很想能够在块内更改它。
  • 但是你不能,因为成功块是在网络调用完成时执行的......所以@"updating news"立即被@"Finished"替换
  • @GonjiDev 是对的。运行成功块后,所有数据都已加载...如果 AFNetworking 有进度块,另一种方法是使用进度块...或者您将不得不查看 NSURLConnection。
  • 所以我刚刚查看了 AFNetworking 文档,显然您可以使用 - (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block; 逐步取回数据,查看文档,您会得到更好的理解...
【解决方案2】:

这个链接应该可以帮助你...NSURLConnection

它描述了要使用的 NSURLConnection 委托方法以及如何在您所处的确切情况下使用它。我知道这不是 AFNetworking 解决方案,但如果您仍在寻找 AFNetworking 解决方案,请查看此方法 - (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block; .

希望这能让你走上正轨。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2022-06-04
    • 1970-01-01
    相关资源
    最近更新 更多