【问题标题】:View does not appear because of iOS 7由于 iOS 7,视图没有出现
【发布时间】:2013-09-18 12:10:11
【问题描述】:

我在装有 iOS 7 的 iPhone 上试用了我的应用程序,除了一件事外,一切都运行良好。在 iOS 6 版本上,当我执行以下代码时,加载视图(带有活动指示器)在加载结束时出现并消失。在 iOS 7 上,视图在加载过程中根本不会出现。

self.loadingView.alpha = 1.0;
[self performSelector:@selector(accessServices) withObject:nil afterDelay:0.0f];

AccessServices 方法:

- (void)accessServices {
     // Getting JSON stuff
     // The code is OK, I just don't copy/paste it here

     self.loadingView.alpha = 0.0;
}

会发生什么?这是 iOS 7 的错误吗?

【问题讨论】:

  • 可能是线程问题,你试过performSelectorOnMainThread:吗?
  • 你能检查一下 iOS 7 中视图的框架吗,因为当我在 iOS 7 中部署项目时,xib 中的框架已更改。然后我更改了 xib 中的框架并成功实现了我的逻辑。
  • 视图不会出现,因为您调用 accessServices 时延迟为 0.0f,这会导致活动指示器消失。您应该在 JSON 回调处理程序中将 alpha 设置为 0

标签: ios uiview ios7 uiactivityindicatorview


【解决方案1】:

我没想到上面代码的行为会发生变化,尽管它可能无法按您期望的方式工作我并不感到惊讶。如果您在主队列上执行 JSON 操作,您的代码将依赖于 UI 更新何时发生的特性,而不是使其明确。

您可能希望将 JSON 代码显式分派到后台队列,然后将最终的 UI 更新分派回主队列。这样的标准模式是:

self.loadingView.alpha = 1.0;

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    // Getting JSON stuff
    // The code is OK, I just don't copy/paste it here

    dispatch_async(dispatch_get_main_queue(), ^{
        self.loadingView.alpha = 0.0;
    });
});

您可以使用 GCD(如上)或操作队列,或其他任何东西。但想法是一样的,UI 更新应该发生在主队列上,而任何远程计算昂贵或缓慢的事情都应该发生在后台队列上。

无论 iOS 版本如何,此模式都应该有效。

【讨论】:

  • 非常感谢,我现在比以前更强壮了。
猜你喜欢
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多