0

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

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

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

4

1 回答 1

1

对于问题的第一部分: 的show方法UIAlertView不会阻塞当前线程,因此继续执行并且您的行为是预期的。您要做的是实现UIAlertViewDelegate的方法之一并将警报的delegate属性设置为self. 因此,当警报解除时,您可以显示您的SecondViewController.


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

else
{
    dispatch_async(dispatch_get_main_queue(), ^{
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"ALERT" message:@"Internet Connection cannot be established." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show]; 
    });
}

希望这可以帮助。

于 2012-05-03T11:57:34.830 回答