【发布时间】:2017-01-08 19:14:07
【问题描述】:
我试图通过在当前视图控制器中创建一个对象来从另一个视图控制器调用一个方法。我正在使用 dispatch_async 块来处理串行队列。串行队列的下一个任务必须是导航到另一个控制器(顺便说一句,它与我使用第一个任务方法的控制器相同)。但是串行队列甚至在从第一个任务中获取数据之前就正在执行第二个任务。所以第二个任务中的条件失败并且导航不会发生。请帮帮我。
我看到了很多使用串行队列完成工作的答案,但我知道要更改用户界面,我们必须在主线程上。那么,这就是控制器不改变的原因吗?有没有办法在主线程上创建一个串行队列?还是总是在不同的线程上?感谢您对我的问题的任何其他解决方案。
这是我的代码:
dispatch_queue_t serialQueue=dispatch_queue_create("***", DISPATCH_QUEUE_SERIAL);
dispatch_async(serialQueue, ^
{
NSLog(@"first async");
[discoveryNewsObject callDiscoveryNewsRequest];
NSLog(@"first async complete");
});
dispatch_async(serialQueue(), ^
{
NSLog(@"second async");
if ([NSArray arrayWithArray:appDelegate.getNewsArray[0]].count==[NSArray arrayWithArray:appDelegate.postImageDimensionsArray].count && [NSArray arrayWithArray:appDelegate.getNewsArray[0]].count!=0)
{
NSLog(@"counts are equal");
[self performSegueWithIdentifier:@"DiscoverySegue" sender:self];
}
NSLog(@"second async complete");
});
【问题讨论】:
-
你为什么要在队列中执行这种步骤?您可以通过简单的方法转到另一个视图控制器。
-
所以你想等待两个异步关闭完成然后才移动到下一个视图控制器?
-
你想让我把方法从另一个视图控制器复制到这里试试??索拉布
-
是的。 Tj3n。我希望在移动到另一个控制器之前完成第一个任务。
-
你应该发布
callDiscoveryNewsRequest函数,它可能需要一个完成块来完成请求后执行代码
标签: ios objective-c multithreading grand-central-dispatch dispatch-async