2

这是一个IOS6的问题。

我有一个应用程序正在调用一个类(A)来检查一些东西。然后我想调用一个类(B)来做别的事情是否可以确保在进程A完成之前进程B不会启动?

目前,我只是在RootVC中一个接一个地调用。

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

[self performA];
[self performB];

谢谢

4

2 回答 2

2

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

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

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

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

于 2012-12-19T18:11:38.410 回答
0

我敢于失败。故事:我的应用程序一直在给我从 iOS4 目标到 iOS6 的地狱更新(带有适用于 iOS5/3GS 的子代码)。它会崩溃,除非我使用 @try 等......在重新尝试时具有内置的延迟间隔(这很愚蠢,因为我不知道用户拥有多大的数据库,也不知道加载它们需要多长时间) . 这是解决我的真正问题的一种痛苦方法:视图在 CoreData 堆栈(日志)可以完全加载之前加载,我看不到让初始视图等到它的 NSMutableArray 的方法(基于我的 CoreData 数据库)对象)加载。基本上,我不断收到关于 addObjectsSortedBy 的错误错误:我的实体的最重要属性。线程似乎是答案,但我需要加载一个 NSMutableArray 并将其输入到我的 initialViewController 中,这将在每次启动时可见(不包括 FirstTime 初始),但我尝试(好吧,12 次尝试)使用线程只是在应用程序启动的早期发生崩溃。结果:我向那些纠缠过那条线的人鞠躬。我的解决方案是在 AppDelegate.m 中构建一个通知,我的 initialViewController viewDidLoad 被告知要先监听它。如果它收到通知,它会跳过并完成正常流程到 [super viewDidLoad]; 如果没有,它会执行@try、@catch、@finally。在@try 中,我尝试就好像通知到达一样继续进行(好像有点晚了),然后我通过向用户显示“请稍候”标签来处理(@catch)错误,然后我告诉应用程序等待.xx 并重复原来的 addObjectsSortedBy:命令好像一切都开始了。我的应用程序的最佳位置,日志中的图像和数据似乎是等待间隔@50 个测试条目的 0.15,有空闲时间并且没有明显的负载延迟。我可能会减少到 0.10 @50 个条目。但是:我不知道如何扩展这个,没有加载足够的日志来获得 object.count!没有它,就无法扩展我的延迟,这意味着它可能(阅读:将)不适用于具有许多条目(200+)的大型日志!我有一个解决方法,但我将继续尝试掌握线程,以便找到解决方案。老实说,一旦我输入了 20 个条目,通知就永远不会及时触发@try。如果可以,请使用线程。由于未能及早这样做,我将自己逼入绝境,并为此付出了代价:我的应用程序需要大修,但我需要在我的腰带上有这个缺口,然后它才值得。越早实现线程加载对您的长期开发越好。与此同时,您也许可以使用我的解决方法来继续测试您应用程序的其他部分。

于 2012-12-21T23:36:54.390 回答