首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RunLoop与UITableView锁定

RunLoop与UITableView锁定
EN

Stack Overflow用户
提问于 2011-12-14 20:53:50
回答 1查看 558关注 0票数 0

我正在编写一个iPad应用程序,并且在ui响应性/锁定方面有问题。

我有一个带有项目的UITableView,当单击一个项目时,它会在互联网上退出并获取该项目并显示它。程序的其余部分(未显示)将使用下载的项目,因此一次只能下载一个项目。

抓取物品可能需要很长时间。在此期间,我希望用户仍然能够滚动UITableView,但在下载上一项之前不能选择任何内容。

我知道这可以使用线程、块和回调来完成,但是现在我没有时间去做(不可能的时间限制)。

我认为一个快速的方法是按顺序下载它,并使用运行循环和一个类似于这两个步骤的标志:

  1. 当用户单击表单元格didSelectRowAtIndexPath被调用时,在其中设置一个全局标志,然后调用下载方法来下载项目。如果用户单击另一项(在下载完成之前),它将看到选中标志并退出该函数,而无需下载任何内容。基本this:
  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {静态BOOL alreadyInHere=FALSE;if (alreadyInHere)返回;alreadyInHere=TRUE;.downloadItem(.);ShowAndUseItem(.);alreadyInHere=FALSE;}

这允许用户在time.

  1. To中只选择一项允许用户在长时间下载期间仍然可以滚动UITableView,我在downloadItem(.)中添加了一个run循环上面显示的方法如下..。

-downloadItem(.){ BOOL downloading=TRUE;callFunctionsToStartdownload(.);//同时(下载){downloading=DownloadSomeBytes(.);CFRunLoopRunInMode(kCFRunLoopDefaultMode,0.5,是);}

(1)和(2)的结果是用户仍然可以在顺序下载期间滚动UITableView,alreadyInHere标志阻止他们选择某些内容并开始另一次下载。

在大多数情况下,这是可行的,但在下载过程中,大约有50%的情况下,UITableView会变得没有响应(不能滚动到表中的其他项),即使在您单击使theUITableView基本上被锁定的东西时,也不会再次调用下载didSelectRowAtIndexPath。

我的问题是,我做的runLoop正确吗?

我知道有其他方法可以做到,但由于其他原因,我现在必须使用这个通用的方法。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-14 22:40:32

您不应该尝试在youR tableview didSelectRow方法中下载或执行任何其他可能长时间的活动。在设置异步下载之后,退出(返回)此UI方法,这样您就不会锁定UI。

同时关闭下载仍然是可以的,但您需要小心在错误或超时之后重置状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8511492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档