插入警报视图但不起作用

时间:2012-05-03 11:39:37

标签: objective-c ios xcode ios5.1

我有一种情况需要提醒用户,访问的下一个视图控制器是“数据加载”。

我将此添加到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;
}

这也行不通。最重要的是,我试图关闭互联网连接,看看是否弹出第二个警报提醒用户没有互联网连接。第二个警报也不起作用。

1 个答案:

答案 0 :(得分:1)

对于问题的第一部分:show的{​​{1}}方法不会阻塞当前线程,因此继续执行并且预期会有您的行为。你要做的是实现UIAlertViewDelegate的一种方法,并将警报的UIAlertView属性设置为delegate。因此,当警报被取消时,您可以显示self


对于第二部分,如果您在后台线程中执行了SecondViewController方法,那么通常会警告您不再显示 - 您需要在运行UI的主线程中显示警报。为此,请使用以下内容更改qBlock语句:

else

希望这会有所帮助。