Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Iphone 在后台线程中显示UIAlertView_Iphone_Objective C - Fatal编程技术网

Iphone 在后台线程中显示UIAlertView

Iphone 在后台线程中显示UIAlertView,iphone,objective-c,Iphone,Objective C,我从后台线程中的Web服务加载数据。当出现任何错误时,在后台线程中显示UIAlertView安全吗?还是应该在主线程中显示警报视图 谢谢你的建议 Frank除了主线程之外,不要对GUI做任何事情。它可能导致非常奇怪的问题和/或崩溃,你不想处理。通常情况下,回溯也是毫无帮助的,所以在默认情况下尽量避免此类问题 因此,请使用: [self performSelectorOnMainThread:@selector(showAlert:) withObject:alertString waitUnti

我从后台线程中的Web服务加载数据。当出现任何错误时,在后台线程中显示
UIAlertView
安全吗?还是应该在主线程中显示警报视图

谢谢你的建议


Frank

除了主线程之外,不要对GUI做任何事情。它可能导致非常奇怪的问题和/或崩溃,你不想处理。通常情况下,回溯也是毫无帮助的,所以在默认情况下尽量避免此类问题

因此,请使用:

[self performSelectorOnMainThread:@selector(showAlert:) withObject:alertString waitUntilDone:NO];
如果您使用的是grand Central dispatch,您可以执行以下操作:

dispatch_async(dispatch_get_main_queue(), ^{ /* show alert view */ });
更新:

DispatchQueue.main.async { // code }
Swift(3.0+):

DispatchQueue.main.async { // code }
有时对您收到的
通知执行此操作也很有帮助,我有过从不同线程触发通知的实例

更新2:

DispatchQueue.main.async { // code }

苹果似乎在iOS11/Xcode9中添加了一些新工具,以帮助调试在错误线程上调用stuff的问题。

您可以通过以下方式尝试在主线程上显示警报:

UIAlertView *alert = [
    [[UIAlertView alloc] initWithTitle:@"the title"
                               message:@"the message"
                              delegate:self
                     cancelButtonTitle:@"OK"
                     otherButtonTitles: nil] autorelease];
[alert performSelector:@selector(show)
              onThread:[NSThread mainThread]
            withObject:nil
         waitUntilDone:NO];
[alert release];

这段代码对我有用

它不是必须是
dispatch\u async(dispatch\u get\u main\u queue(),^{/*show alert view*/})?我修复了美国复制贴纸的小排印错误。仍然存在一个排印错误。将“waitUntillDone”更改为“waitUntillDone”。@user102008您确定吗?在后台线程上创建
alertView
,然后调用
[alertView PerformSelector OnMainThread:@selector(show)with object:nil waitUntilDone:NO]
似乎可以工作。