1
-(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,在用户按下“关闭”按钮后,alertView 应该消失。就这样。无论如何,警报视图不起作用。如果确实发生了异常,则会显示警报视图,但是当我按下关闭按钮时,什么也没有发生并且程序仍然冻结。

是否因为我在 @catch 块内使用我的 alertView 或类似的东西而发生了邪恶?

提前谢谢。

4

2 回答 2

1

@try 内部到底是什么引发了异常?Objective-C 中的异常处理通常不赞成错误处理。Objective-C 编程语言文档说:

在 Objective-C 中,异常是资源密集型的。您不应该将异常用于一般的流控制,或者仅仅表示错误。相反,您应该使用方法或函数的返回值来指示发生了错误,并在错误对象中提供有关问题的信息。

异常编程主题指南也有类似的观点:

重要您应该保留使用异常来进行编程或意外的运行时错误,例如越界集合访问、尝试改变不可变对象、发送无效消息以及失去与窗口服务器的连接。您通常在创建应用程序时而不是在运行时处理这些类型的异常错误。

错误处理编程指南也很好读。

于 2012-07-07T23:55:25.080 回答
0

很多绘图的事情必须在主线程上发生。如果您将警报视图代码移动到它自己的方法中,您可能会找到答案,并在您的 @catch 中调用:

[self performSelectorOnMainThread:@selector(myAlertMethod) withObject:nil waitUntilDone:NO];

...其中 myAlertMethod 是将警报代码移至的方法。

于 2012-07-08T00:19:24.523 回答