我有一种情况需要提醒用户,访问的下一个视图控制器是“数据加载”。
我将此添加到FirstViewController按钮操作:
- (IBAction)showCurl:(id)sender {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Please Wait" message:@"Acquiring data from server" delegate:self cancelButtonTitle:@"OK!" otherButtonTitles:nil];
[alert show];
SecondViewController *sampleView = [[SecondViewController alloc] init];
[sampleView setModalTransitionStyle:UIModalTransitionStylePartialCurl];
[self presentModalViewController:sampleView animated:YES];
}
它不起作用。它加载到SecondViewController,只在加载SecondViewController后弹出。
所以我尝试了SecondViewController本身。 SecondViewController从远程服务器提取数据,这是因为它需要一段时间才能下载,具体取决于Internet连接。所以我决定在函数中添加UIAlertView:
- (NSMutableArray*)qBlock{
UIAlertView *alert_initial = [[UIAlertView alloc]initWithTitle:@"Loading" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert_initial show];
NSURL *url = [NSURL URLWithString:@"http://www.somelink.php"];
NSError *error;
NSStringEncoding encoding;
NSString *response = [[NSString alloc] initWithContentsOfURL:url
usedEncoding:&encoding
error:&error];
if (response) {
const char *convert = [response UTF8String];
NSString *responseString = [NSString stringWithUTF8String:convert];
NSMutableArray *sample = [responseString JSONValue];
return sample;
}
else {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"ALERT" message:@"Internet Connection cannot be established." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
return NULL;
}
这也行不通。最重要的是,我试图关闭互联网连接,看看是否弹出第二个警报提醒用户没有互联网连接。第二个警报也不起作用。
答案 0 :(得分:1)
对于问题的第一部分:show
的{{1}}方法不会阻塞当前线程,因此继续执行并且预期会有您的行为。你要做的是实现UIAlertViewDelegate的一种方法,并将警报的UIAlertView
属性设置为delegate
。因此,当警报被取消时,您可以显示self
。
对于第二部分,如果您在后台线程中执行了SecondViewController
方法,那么通常会警告您不再显示 - 您需要在运行UI的主线程中显示警报。为此,请使用以下内容更改qBlock
语句:
else
希望这会有所帮助。