connectionDidFinishLoading - 如何强制更新 UIView?

2024-02-07

我可以从互联网下载 ZIP 文件。后处理在connectionDidFinishLoading 中完成,并且工作正常,但没有更新UIView 元素。例如,我设置 statusUpdate.text = @"Uncompressing file" 但该更改直到 connectionDidFinishLoading 完成后才会出现。同样,UIProgressView 和 UIActivityIndi​​catorView 对象在该方法结束之前不会更新。

有什么方法可以强制在此方法中更新 UIView 吗?我尝试设置 [self.view setNeedsDisplay] 但这不起作用。它似乎在主线程中运行。这里的所有其他命令都可以正常工作 - 唯一的问题是更新 UI。

Thanks!

更新:这是不更新 UIVIEW 的代码:

-(void)viewWillAppear:(BOOL)animated {
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(processUpdate:) userInfo:nil repeats:YES];
    downloadComplete = NO;
    statusText.text = @"";

}

-(void)processUpdate:(NSTimer *)theTimer {
    if (! downloadComplete) {
        return;
    }

    [timer invalidate];
    statusText.text = @"Processing update file."; 
    progress.progress = 0.0;
        totalFiles = [newFiles count];
    for (id fileName in newFiles) {
        count++;
            progress.progress = (float)count / (float)totalFiles;
        // ... process code goes here ...
         }
}

在 processUpdate 结束时,我设置 downloadComplete = YES。此构建和运行不会出现错误,并且按预期工作,除了在 processUpdate 完成之前 UIVIEW 中没有任何更新,然后所有内容都会立即更新。

感谢您一直以来的帮助!


正如 Niels 所说,如果您想看到视图更新,则必须将控制权返回给运行循环。但除非确实需要,否则不要开始分离新线程。我推荐这种方法:

- (void)connectionDidFinishLoading:(NSConnection *)connection {
    statusUpdate.text = @"Uncompressing file";
    [self performSelector:@selector(doUncompress) withObject:nil afterDelay:0];
}

- (void)doUncompress {
    // Do work in 100 ms chunks
    BOOL isFinished = NO;
    NSDate *breakTime = [NSDate dateWithTimeIntervalSinceNow:100];
    while (!isFinished && [breakTime timeIntervalSinceNow] > 0) {
        // do some work
    }
    if (! isFinished) {
        statusUpdate.text = // here you could update with % complete
        // better yet, update a progress bar
        [self performSelector:@selector(doUncompress) withObject:nil afterDelay:0];
    } else {
        statusUpdate.text = @"Done!";
        // clean up
    }
}

基本思想是你要分小块进行工作。您从方法返回以允许运行循环定期执行。对performSelector: 的调用将确保控制权最终返回到您的对象。

请注意,这样做的风险是用户可能会按您可能意想不到的方式按下按钮或与 UI 交互。调用 UIApplication 可能会有所帮助beginIgnoringInteractionEvents在工作时忽略输入...除非您想表现得非常好并提供一个取消按钮来设置您签入的标志doUncompress方法...

您也可以尝试自己运行运行循环,调用[[NSRunLoop currentRunLoop] runUntilDate:...]经常这样,但我从未在自己的代码中尝试过。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

connectionDidFinishLoading - 如何强制更新 UIView? 的相关文章

  • Storekit /应用程序内购买:当我将应用程序提交到应用程序商店时,“环境:沙盒”标签是否会消失?

    这是我第一次实施应用内购买 在应用内购买的开发和测试过程中 我在购买过程中看到以下警报 我的应用程序内购买运行良好 应用程序即将提交 在提交应用程序之前我是否必须执行某些操作 以使 环境 沙盒 标签消失 或者所有这些都在我提交时自动处理 你
  • 如何在 iPhone 窗口应用程序中显示另一个窗口

    首先 我是 Objective C 和 iPhone 编程的新手 有事我无法去上班 我有一个 iPhone 窗口应用程序 在主窗口中有一个按钮 我想在单击按钮时显示另一个窗口 我已将事件与我的控制器绑定 我只是不知道如何在事件中显示我的另一
  • 将标题和图像添加到导航栏

    我需要将 UIViewController 的名称和图像设置为导航栏 到目前为止 我可以显示图像 但标题当然丢失了 show image UIImage image UIImage imageNamed bar icon png UIIma
  • 如何更改 UIActivityIndi​​catorView 以设置自定义图像?

    好吧 我正在寻找一种方法来更改我的微调器图像并使用自定义图像 有什么建议吗 我创建了一个UIActivityIndi catorView 的子类 https github com cncool CDActivityIndicatorView
  • 是否可以在“NSFetchRequest”中按子类排序而不添加其他属性?

    我想对结果进行分组NSFetchRequest按实体 这些实体都共享相同的抽象父级 例如 animal cat dog The NSFetchRequest has includesSubentities set TRUE and enti
  • 在 iPhone 应用程序中获取路线和路线导航

    我正在开发一款应用程序 该应用程序将重点关注在驾驶时为用户提供路线和逐段指示 他们在驾驶过程中留在应用程序中非常重要 因此我真的不想让他们离开应用程序并转到内置的地图应用程序 我最近对如何包含此功能进行了大量研究 众所周知 这并不容易 因为
  • iPhone 应用程序拒绝 17.2:应用程序要求用户使用 Facebook 帐户登录

    我按照此处的本机 iOS 应用程序的登录说明进行操作https developers facebook com docs mobile ios build https developers facebook com docs mobile
  • 应用程序关闭时下载报刊亭应用程序

    我正在实现一个报摊杂志应用程序 它通过 Urban Airship 推送通知接收新期刊 只要应用程序位于前台或后台 这就可以正常工作 但据我所知 当应用程序完全关闭时也应该触发下载 但发送推送 content available 1如果我的
  • 检测 UIWebView 中的 Zoomscale

    我的问题是我想检测 UIWebView 的缩放比例 我尝试搜索它但没有得出正确的答案 感谢任何帮助 好吧 虽然UIWebView没有zoomScale财产 UIScrollView做 所以我们只需扫描它subView s为了scrollVi
  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 如何在 iPhone sdk 上访问年龄限制家长控制

    有没有办法以编程方式访问 iPhone iPad iPod 上家长控制中设置的年龄限制 如果年龄限制太低 我想禁止使用某些功能 我一直在四处寻找 但也许我没有使用正确的搜索词或其他东西 任何帮助表示赞赏 也许这样行不通 thanks 从 3
  • TestFlight Beta 中的消息不可用

    I am seeing Unavailable message in TestFLight Beta App in iOS8 Please find the attached screenshot please tell me how to
  • iOS 5 UIView drawRect 覆盖在设备上不起作用

    我正在准备在 iOS 5 GM 上发布我的 iPhone 应用程序 并遇到了 UIView 的错误 当我在子类上重写 drawRect 方法时 模拟器会显示所需的结果 但当我尝试在实际设备上测试时 drawRect 重写根本没有任何效果 我
  • iphone相当于android打开其他应用程序的意图

    是否有像 iphone 中可用的 android 意图功能 Android 使用意图从调用应用程序打开其他应用程序 以使用其他应用程序已实现的功能 我在某处读到 iphone 有 url 方案 但找不到更多信息 thanks 尝试查看以下答
  • 如何从标签栏控制器上方显示 UIActionSheet 视图?

    我需要在选项卡栏控制器上方显示操作表 我的意思是 即使操作表视图处于可见模式 我也能够看到选项卡栏控制器 因此 请建议如何从选项卡栏控制器上方查看 是否可以 其次 如何更改操作表的背景颜色和取消按钮背景颜色 请帮我 谢谢你 马丹 莫汉 要从
  • NSString 对象的最大长度是多少?

    NSString 对象中可以保存的最大字符串大小是多少 这会动态变化吗 我假设 NSString 的硬限制是 NSUIntegerMax 个字符 因为 NSString 的索引和大小相关的方法返回 NSUInteger 由于当前能够运行 i
  • iOS 上关键 ClientState 警告的默认访问速度缓慢

    在测试我的 iOS 应用程序时 我收到 对关键 ClientState 的默认访问速度慢 耗时 0 034635 秒 容差为 0 020000 警告 它似乎是间歇性发生的 我试图环顾四周看看它是关于什么的 但我并不完全确定 任何帮助表示赞赏
  • 从设备获取联系人列表时出现问题

    这段代码有什么问题 NSMutableArray contactArray NSMutableArray alloc init ABAddressBookRef addressBook ABAddressBookCreate CFArray
  • Grand Central Dispatch (GCD) 调度源标志

    我最近不再使用 to GCD 调度来源 https developer apple com documentation dispatch 1385630 dispatch source create监视文件更改 效果很好 API 也变得更加
  • 找不到 Cocoa/Cocoa.h 文件

    我在用XMPPFramework在我的应用程序中 我已将 Cocoa Cocoa h 导入到我的 m 文件中 但是当我构建项目时Xcode显示错误 错误 未找到 Cocoa Cocoa h 文件 我该如何解决这个错误 如果您正在为 iOS

随机推荐

  • 我应该在渲染到 HTML5 画布之前剔除元素还是让画布剔除

    我应该在调用画布绘制方法之前剔除元素还是让画布处理剔除 我应该实现如下逻辑 if circle x circle radius gt 0 circle x circle radius
  • 准备好的语句删除前导零[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我试图在我的数据库中输入一个电话号码 该列设置为 varchar 15 并且在 phpMyAdmin 中它将接受一个以 0 开头的电话号码
  • C 中管道命令的问题

    我正在尝试用 C 语言为 Unix 创建一个简单的 shell 我已经能够完成所有命令的解析和执行 但我遇到了管道问题 我认为问题在于我没有连接到正确的管道来输入第二个命令 例如 如果我输入 ls wc 它会在 wc 命令之后暂停 我认为这
  • AndroidJUnit4.class + org.junit.Assume.assumeTrue = AsclusionViolatedException

    我已经成功地将我的 Android 项目转换为 JUnit4 当然我想要这样做的主要原因是不起作用 如果有人在这里有想法 我会很乐意提供帮助 我试图解决的问题是 如果构建未指向登台服务器 我想自动跳过某些测试 我已经设置了这个BUILD T
  • 错误未定义对“std::__ndk1::locale::~locale()”的引用

    我在使用编译代码时遇到问题适用于 Android 的提升 https github com moritz wundke Boost for Android使用 Android Studio ndk 我正在使用 boost 中的 libboo
  • 如何读取和更改 xml 树枝中的 标签和

    我是 xml twig 的新手 如何阅读和更改 and 我如何修改这个标签 因为我不知道如何在 xml Twig 中读取和更改这个标签 我的输入
  • 未找到 Html 帮助程序扩展

    我正在使用 ASP net MVC 的发行版 并且似乎经常遇到此错误 System Web Mvc HtmlHelper does not contain a definition for RenderPartial and no exte
  • scp 失败并显示“协议错误:文件名与请求不匹配”

    我有一个使用 SCP 从 AWS 上的远程 Linux 主机提取文件的脚本 每晚运行相同的代码大约 6 个月没有出现问题后 今天开始失败protocol error filename does not match request 我在下面一
  • 无法在 Websphere 8 上查找远程 EJB

    我已经部署了一个具有本地和远程接口的 EJB 部署后我可以正常查找本地 EJB 但我无法从 Java SE 客户端处理远程 EJB代码很简单 Local DemoFacade class Remote DemoFacadeRemote cl
  • ASP.NET 连接已重置

    我有一些代码从 SQL DB 中提取数据 然后循环遍历记录以生成字符串 该字符串最终将写入文本文件 该代码在我的本地 VS 上运行良好 但在实时服务器上 大约一分半钟后 我收到 未收到数据 错误 chrome 该代码在循环数据表的过程中停止
  • 将页面加载设置为黑色而不是白色背景?

    网站链接 http www ideagang co home php http www ideagang co home php 从一页点击到另一页时是否可以将背景设置为黑色 现在 网站以黑色背景完美加载 只是当我从一个页面导航到另一个页面
  • 如何从 Vista/7 可执行文件中提取完整图标?

    如果我有一个 Vista ico 文件 其中包含 16x16 32x32 256x256 等版本的图标 我只需执行以下操作即可成功将其加载为 NET 图标 Icon myIcon new Icon C MyIcon ico 然后我可以访问图
  • Rails 回调未执行

    在我的一生中 我试图找出为什么我的回调没有被执行sometimes 你没听错有时因为大多数时候它都是开箱即用的 我所拥有的只是两个模型之间的父 子关系 创建子记录后我所做的一切after create回调是更新 累积父字段中的所有子金额以避
  • 通信链路故障,Spring Boot + MySql +Docker + Hibernate

    我正在使用 Spring Boot Hibernate 和 MySql 运行应用程序时 它运行良好 符合预期 但是 在制作 docker compose 文件并使用 mysql docker 映像运行应用程序 docker 映像时 它会出现
  • 如何使用空手道实现基本身份验证?

    我在Karate Demo中看到了有关Oauth 2的详细信息 您还能提供如何实现Basic Auth吗 https i stack imgur com 3DWyF png 是的 这个 JS 函数就是你所需要的 basic auth js
  • 如何用C#获取html页面源码

    我想将完整的网页 asp 保存在本地驱动器中 htm from url https www digikala com Search Category Motherboard Category Electronic Devices Categ
  • 指定泛型集合中重写方法的类型提示

    我定义了一个抽象基类BaseRepository充当具有指定超类型的项目的集合Foo 中的便利类方法BaseRepository被注释 类型暗示可以与类型的对象一起使用Foo 这是一个最小的例子 from abc import ABCMet
  • 将多个txt文件加载到单个数据框中并将名称保留为R中的列

    我是 R 新手 我正在尝试将 100 个左右的 txt 文件 包含名称 频率和性别三列 加载到单个数据框中 这些文件的名称均为 yob1990 txt 等 我可以将所有文件放入 R 中 但我不知道如何添加仅包含年份的列 有人可以帮忙吗 我会
  • 从 PHP 命名空间内定义全局函数

    Is it possible从 PHP 命名空间内 在具有名称空间 http php net manual en language namespaces definition php宣言 如果是这样 怎么办
  • connectionDidFinishLoading - 如何强制更新 UIView?

    我可以从互联网下载 ZIP 文件 后处理在connectionDidFinishLoading 中完成 并且工作正常 但没有更新UIView 元素 例如 我设置 statusUpdate text Uncompressing file 但该