我很新的iPhone发展,但我很接近我的释放第一应用(相关的网站,我运行)。该应用程序需要一个非常大的数据库,因此我决定只在本地存储最常用的数据,通过从数据库中我的网站运行了一个JSON Web服务调用检索其他数据。

虽然执行OK使用模拟器(打活DB)的搜索依赖于Web服务调用已花费的时间比在手机上运行时,我一直希望他们会。相比于天然的搜索这是瞬间的,当这些调用看起来更糟。为了减少相对差,我想放一个假间质性(页面活动的指标)的本地搜索(Web服务的搜索已经在使用一个),但我一直有与导航控制器的时序问题时,联合推压睡眠(N)。

总之,我的应用程序的搜索部分是一个navController wihin一个tabController标签。当试图使用这样的代码:

[[tabBarController.viewControllers objectAtIndex:0] pushViewController:(UIViewController *)waitingController animated:YES];
sleep(2);

我发现,推总是等待睡眠来执行,当我想要的效果是在视图控制器要推,然后应用继续模拟搜索过程之前等待两秒钟之前完成。

我已经有一些其它奇怪的结果与navController推,有几次我已经经历了似乎是两个独立的viewcontrollers的糖化当我推开间质性一个留在地方的内容中逐只一个我想推在它的地方剩余的标题。

我敢肯定,有一个根本缺乏对我而言理解责怪,所以我希望有一个位莅临指导。

干杯,

艾伦。

有帮助吗?

解决方案

sleep(float)块主线程使所述UI来冻结。而是应该将计划使用的 -[NSObject performSelector:withObject:afterDelay:]

示例:

[label performSelector:@selector(setText:) withObject:@"Delayed Hello World!" afterDelay:2.0f];

其他提示

我想看看改变你的架构和不睡觉在主线程 - 不是一个伟大的用户体验。

考虑使用的NSOperation控制与Web服务的互动 - 这将让你排队的操作,并让他们在一个特定的顺序或并行运行

的NSOperation是一个非常简单的方法来提供强大的线程操作 - 你可以选择拨打电话回你要一路做任何更新,主线程

我觉得这种架构将帮助您使用户界面更好 - 但一旦你重新配置你的思维来使用操作,你会发现很多其他的好处。

注:我用了几次,真正到用的NSOperation和NSOperationQueue交手 - 但我投入的时间是绝对值得的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top