Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标c-在主线程完全阻塞之前显示加载屏幕_Ios_Objective C_Multithreading - Fatal编程技术网

Ios 目标c-在主线程完全阻塞之前显示加载屏幕

Ios 目标c-在主线程完全阻塞之前显示加载屏幕,ios,objective-c,multithreading,Ios,Objective C,Multithreading,在我的应用程序中,我有两种方法来隐藏和显示名为 -(void)hideCurrentView -(void)showCurrentView 他们总是被召集在一起。调用hideCurrentView时,我希望开始显示加载屏幕,然后在showCurrentView显示所有必要的ui元素时隐藏此加载屏幕。我的加载屏幕是一个以活动指示器作为子视图的视图。问题是我必须在主线程上执行hideCurrentView和showCurrentView中发生的所有操作。这就是为什么我的加载屏幕永远不会出现的原

在我的应用程序中,我有两种方法来隐藏和显示名为

 -(void)hideCurrentView
 -(void)showCurrentView
他们总是被召集在一起。调用hideCurrentView时,我希望开始显示加载屏幕,然后在showCurrentView显示所有必要的ui元素时隐藏此加载屏幕。我的加载屏幕是一个以活动指示器作为子视图的视图。问题是我必须在主线程上执行hideCurrentView和showCurrentView中发生的所有操作。这就是为什么我的加载屏幕永远不会出现的原因:-(

我尝试将show loading screen方法放在后台线程中:

-(void)hideCurrentView {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, (unsigned long)NULL), ^(void) {
        [self showLoadingScreen];
    });
    [self performSelectorOnMainThread:@selector(hideCurrentViewOnMainThread) withObject:nil waitUntilDone:YES];
}

-(void)showCurrentView {
    [self performSelectorOnMainThread:@selector(showCurrentViewOnMainThread) withObject:nil waitUntilDone:YES];
}
这不起作用。加载屏幕从不显示,因为主线程被阻塞。我也尝试直接在主线程上显示加载屏幕,但它也不起作用

有人能告诉我,在执行ui操作之前,如何显示加载屏幕,然后在所有ui操作完成后再次隐藏它吗


感谢您的帮助!

如果您只是添加子视图,则不应在后台线程中调用
showLoadingScreen
。(或更一般地操作UI)
我猜你的
hideCurrentViewOnMainThread
中有一些东西与UI无关,它会阻止主线程,而这部分代码应该在另一个线程中运行。

是的。永远不要阻止主线程。如果你:你做得不对IOS也不喜欢它BTW为什么你认为你必须做阻止的事情主线程上的y?我认为performSelectorOnMainThread会阻止主线程,直到所有事情都完成。我在hideCurrentView和showCurrentView中所做的只是添加和删除子视图以及执行一些视图动画。在我的建议中,我真的应该在主线程上执行这些操作。