-(IBAction)showCountryInfo:(id)sender
{
@try
{
CountryProperties *countryProperties=[self.storyboard instantiateViewControllerWithIdentifier:@"Culture"];
countryProperties.countryID=self.countryID;
countryProperties.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.navigationController presentModalViewController:countryProperties animated:YES];
}
@catch (NSException *exception)
{
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Sorry" message:@"Module under revision" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil];
[alert show];
}
}
我希望从这段代码中只显示一个alertView,用户按下“Dismiss”按钮后,alertView就会消失。就这样。无论如何,警报视图不起作用。如果发生异常,则会显示警报视图,但是当我按下“关闭”按钮时,没有任何反应,程序冻结仍然存在。
是不是因为我在@catch块里面使用了我的alertView或类似的东西?
提前完成。
答案 0 :(得分:1)
@try内部究竟是什么抛出异常? Objective-C中的异常处理通常不赞成进行错误处理。 Objective-C Programming Language docs说:
Objective-C中的例外是资源密集型的。你不应该使用 一般流量控制的例外,或仅仅表示错误。 相反,您应该使用方法或函数的返回值 表示发生了错误,并提供有关的错误信息 错误对象中的问题。
Exception Programming Topics指南有类似的观点:
重要您应该保留使用例外编程或 意外的运行时错误,例如越界集合访问, 试图改变不可变对象,发送无效消息,以及 失去与窗口服务器的连接。你经常照顾 当应用程序存在时,这些类型的错误和异常 创建而不是在运行时。
答案 1 :(得分:0)
主线程上必须发生很多绘图事情。如果您将警报视图代码移动到自己的方法,并在@catch中调用,您可能会找到答案:
[self performSelectorOnMainThread:@selector(myAlertMethod) withObject:nil waitUntilDone:NO];
...其中myAlertMethod是您将警报代码移动到的方法。