iOS - 等待进程结束

时间:2012-12-19 17:53:41

标签: objective-c ios uiviewcontroller

这是IOS6的问题。

我有一个应用程序正在调用类(A)来检查某些内容。然后我想叫一个班级(B)去做别的事情 是否有可能确保在流程A完成之前流程B没有启动?

目前,我只是在RootVC中一个接一个地打电话。

每个都显示模态视图,我只能看到B ..

[self performA];
[self performB];

由于

2 个答案:

答案 0 :(得分:2)

有几种工具可用于管理您可以使用的应用程序部分的执行顺序。但是,由于您正在呈现视图控制器,因此您有一些限制;你不想阻止主线程(否则应用程序将无法响应),你必须在主线程上执行UI操作。

在这种情况下,最常见且可能最合适的解决方案是设置回调以在操作B完成时触发操作A

作为A的一部分呈现的模态视图控制器可能在成功完成任务时调用委托。然后该代表可以开始任务B

或者,您可以将块传递给AA将在完成时执行。然后该块可以执行任务B

答案 1 :(得分:0)

我抓住了胆子而失败了。 故事:我的应用程序一直在给我从iOS4目标到iOS6的地狱更新(带有iOS5 / 3GS的代码子代码)。它崩溃,除非我使用@try等...在重新尝试时内置延迟间隔(这是愚蠢的,因为我不知道用户有多大的数据库,也不知道加载它们需要多长时间) 。解决我的真正问题是一种痛苦的方法:在CoreData堆栈(日志)可以完全加载之前加载视图并且我没有看到使初始视图等待直到其NSMutableArray(基于我的CoreData数据库)的方法对象)加载。基本上,我不断收到有关addObjectsSortedBy的错误错误:我实体的最重要属性。 线程似乎确实是答案,但我需要加载NSMutableArray并将其提供给我的initialViewController,它将在每次启动时显示(不包括FirstTime初始值),但我尝试(好的,12次尝试)使用线程只是使崩溃发生在应用程序启动的早期。 结果是:我向那些争吵那些斗牛士的人鞠躬。 我的解决方案是在AppDelegate.m中建立一个通知,我的initialViewController viewDidLoad被告知在其他任何事情之前监听它。如果它收到通知,它会向前跳过并完成正常过程到[super viewDidLoad];如果没有,它执行@try,@ catch,@finally。在@try我尝试继续进行,就好像通知到了(就像它有点晚了),然后我通过向用户显示“Please Wait”标签来处理(@catch)错误,然后我告诉应用程序等待.xx并重复原始的addObjectsSortedBy:命令,好像一切都是kösher开始的。我的应用程序的最佳位置,日志中的图像和数据似乎是.15等待间隔@ 50个测试条目,时间到备用,没有明显的负载滞后。我可能会去.10 @ 50条目。 但是:我不知道如何扩展这个,没有足够的日志加载到object.count!没有它,就没有办法扩展我的延迟,这意味着它可能(读取:将)不适用于具有许多条目(200+)的大型日志! 我有一个解决方法,但我会继续尝试抓住线程,以便有一个解决方案。说实话,一旦我点击20个条目,通知就不会及时发生@try发生。 如果可以,请使用线程。我没有尽早这样做,并且为此付出代价,我把自己画成了一个角落:我的应用程序需要进行大修,但是我需要在我的腰带上使用这个缺点才能获得它。您可以越早实现线程加载,这对您的长期开发越有利。与此同时,您可以使用我的解决方法继续测试应用的其他部分。