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