在后台线程中显示UIAlertView

Fra*_*iet 23 iphone objective-c

我从后台线程中的Web服务加载数据.UIAlertView当出现任何问题或在主线程中显示警报视图时,在后台线程中显示是否安全?

感谢您的建议

坦率

Ant*_*udt 50

除主线程外,不要对GUI执行任何操作.它可能会导致非常奇怪的问题和/或您不想处理的崩溃.通常回溯也是非常无益的,所以默认情况下尽量避免这种问题.

因此使用此:

[self performSelectorOnMainThread:@selector(showAlert:) withObject:alertString waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)

如果您正在使用Grand Central调度,您可以执行以下操作:

dispatch_async(dispatch_get_main_queue(), ^{ /* show alert view */ });
Run Code Online (Sandbox Code Playgroud)

更新:

斯威夫特(3.0+):

DispatchQueue.main.async { // code }
Run Code Online (Sandbox Code Playgroud)

Notifications你接收到的情况下执行此操作有时会很有帮助,我有过从不同的线程中解雇的实例.

更新2:

看起来苹果已经在iOS11/Xcode9中添加了一些新工具,以帮助调试在错误的线程上调用内容的问题.

  • 我修复了小错字给我们复制贴纸. (2认同)

aya*_*aya 5

dispatch_async(dispatch_get_main_queue(), ^{
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
        });
Run Code Online (Sandbox Code Playgroud)

这段代码适合我