【发布时间】:2014-03-29 00:01:23
【问题描述】:
我正在尝试为 iOS 实现错误弹出功能。我目前的实现:
void SysErrorAlert(NSString * title, NSString * message, ...)
{
NSString * contents = nil;
va_list args;
va_start(args, message);
contents = [[NSString alloc] initWithFormat:message arguments:args];
va_end(args);
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:title
message:contents
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
[alert show];
// tried this but popup still never shows...
//for (;;) { }
}
但是,“[alert show]”会立即返回,而不会显示弹出对话框。 我需要将对话框显示在当前应用程序屏幕的顶部并阻止调用线程,直到用户单击其中一个按钮。应用程序将在函数返回后终止它们。
该应用程序正在运行 Cocos2d,所以可能是 Cocos 绘图干扰了 UIAlertView...但我对 iOS 编程相当陌生,可能在这里遗漏了一些明显的东西。
注意:我没有在实际设备上测试过,只在模拟器中测试过。会不会是模拟器的限制/错误?
【问题讨论】:
-
仅供参考 -
[alert show]应该立即返回。显然某处有问题,但show立即返回是正常的。它不是为了阻塞线程而设计的。您需要为事件处理编程。 -
您的代码应该工作。会不会是线程问题?通常,当事情没有出现时,因为一些 UI 代码是在后台队列上执行的(无论如何对我来说)。
-
@glampert 这不是 Windows。没有阻止消息对话框。您显示警报并完成。您实现了正确的
UIAlertViewDelegate方法,并且当用户点击按钮时将调用您的代码。然后根据需要进行处理。 -
@glampert 是的,所有与 UI 相关的代码都必须在主线程上调用。是的,应用程序需要回到运行循环的顶部才能真正显示警报视图。
-
@glampert 听起来您正在尝试实现和执行处理程序。这应该是一个很好的起点:stackoverflow.com/q/1787254/620197
标签: ios objective-c cocoa-touch cocos2d-iphone uialertview