jjzjj

iphone - 带有 UIActivityIndi​​cator 的 UIAlertView 显示得太晚/线程问题

coder 2024-01-27 原文

在我的应用程序中,我有几个地方可以调用 Web 服务并检索 JSON,然后将其解析为对象数组。最耗时的肯定是web服务调用了。我想要的行为如下:

  1. 用户选择感兴趣的行
  2. 在当前 View 上,添加了带有 ActivtiyIndi​​cator subview 的 AlertView
  3. 新 VC 中的数据加载
  4. 出现新 View
  5. AV 指示灯消失

我的 VC 配备了 doLoadData基本上加载每个 VC 显示的数据数组的方法。例如:

AnimalViewController有一个按钮“查看狗”,按下时:

DogViewController *vc = [[DogViewController alloc] init];<br/>[self.navigationController pushViewController:vc animated:YES];<br/> [vc release];

DogViewController有属性(property)NSArray *dogs和方法doLoadDogs ,这需要一段时间才能发生。

目前我在“查看狗”方法中有:

  1. 创建带有 ActivityIndi​​cator 的 AlertView
  2. 显示它
  3. 创建VC
  4. 插入它
  5. 隐藏 AlertView
  6. 释放并归零

这似乎并不困难,但我还没有找到一个简单的线程实现。

最佳答案

如果您的网络调用/数组创建需要很长时间并且在主线程上进行,那么所有这些基本上会同时发生。当您执行诸如显示警报 View 、推送导航 Controller 等操作时,您真正在做的是安排这些操作在运行循环的下一轮发生。由于您的“View Dogs”方法本质上是阻塞的,直到一切都完成,所以运行循环不会再次执行,直到一切都需要之后。

最好的解决方案是分解出您的网络加载代码,而不是阻塞您的主线程/主事件循环。作为快速修复,您可以使用 GCD 分解出当前“View Dogs”方法的各个部分。例如(显然这需要根据您的实际要求/代码进行更新):

- (void)viewDogs:(id)sender
{
  dispatch_queue_t mainQueue = dispatch_get_main_queue();
  // create and schedule the alert view
  UIAlertView* alert = [[UIAlertView alloc] initWithTitle...]; // your real alert view
  dispatch_async(mainQueue, ^{ [alert show]; });
  dispatch_async(mainQueue, ^{
    DogViewController* vc = [[DogViewController alloc] init];
    [[self navigationController] pushViewController:vc animated:YES];
    [vc release];
    dispatch_async(mainQueue, ^{ [alert dismissWith...]; [alert release]; });
  });
}

关于iphone - 带有 UIActivityIndi​​cator 的 UIAlertView 显示得太晚/线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7799237/

有关iphone - 带有 UIActivityIndi​​cator 的 UIAlertView 显示得太晚/线程问题的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  5. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  6. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  7. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  8. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  9. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  10. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

随机推荐