• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iphone - UIAlertView 出现晚了

[复制链接]
菜鸟教程小白 发表于 2022-12-12 13:54:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在与我的 ios 应用程序中的服务器通信。我有以下打开警报 View 的方法。我想在应用程序从服务器获取响应时显示加载 View 。

- (void) showDetailedQuestionid)sender
{
       //loading view                  
        self.loading_alert = [[UIAlertView alloc] initWithTitle"Loading\nPlease Wait..." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil];
        [self.loading_alert show];

        UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

        // Adjust the indicator so it is up a few pixels from the bottom of the alert
        indicator.center = CGPointMake(loading_alert.bounds.size.width / 2, loading_alert.bounds.size.height - 50);
        [indicator startAnimating];
        [self.loading_alert addSubview:indicator];

    UIButton *btn = (UIButton*)sender;
    int indx = btn.tag;

    NSLog(@"tag:%d",indx);
    answerAnQuestion *vc = [self.storyboard instantiateViewControllerWithIdentifier"Answer"];

    vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal ;
    vc.que_id = [self.que_id valueForKey:[NSString stringWithFormat"%d",indx]];
    vc.qid_list = self.que_id;
    vc.crnt = indx;

    [self presentViewController:vc animated:YES completion:nil];
    [self.loading_alert dismissWithClickedButtonIndex:0 animated:YES];
}

在另一个 answerAnQuestion.m

- (void)viewDidLoad
{
            NSString *address = [NSString stringWithFormat"%@%@%@%@%@%@%@", path,@"questions/",que_id,@"?token=",token,@"&user_id=",usrId];
    NSURL *URL = [NSURL URLWithString:address];
    NSLog(@"%@",address);

    [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[URL host]];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL cachePolicy:NSURLCacheStorageAllowedInMemoryOnly
                                                       timeoutInterval:60.0];
    [request setHTTPMethod"GET"];
    responseData = [[NSMutableData alloc] init];

    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

    if (data) 
    {
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*) response;
        //If you need the response, you can use it here
        int statuscode = [httpResponse statusCode];
        NSString *responseMsg = [NSHTTPURLResponse localizedStringForStatusCode:statuscode];
        NSLog(@" Status code: %d",statuscode );
        NSLog(@" Status msg: %@",responseMsg );

    }
    else 
    {
        // Handle error by looking at response and/or error values
        NSLog(@"%@",error);
    }
}

我的问题是警报 View 仅在 View 更改时显示片刻。它应该在我单击按钮时打开。可能是什么原因?如何解决?

编辑 1:

如果我向服务器发出异步请求,那么我无法在我的 tableview 中设置这些数据。我只能在发送同步请求时在我的表格 View 中设置这些数据,但它会阻止应用程序。为什么会这样?

任何帮助将不胜感激。 谢谢你。



Best Answer-推荐答案


您在主线程上发送 SynchronousRequest,因此它阻塞了您的 UI 线程。阅读多线程,您将获得有关此的各种教程。我可以建议你选择 GCD 或 NSOperation 和 NSOperationQueue。谷歌搜索上述任何一个,你都会得到不同的样本。

或者你可以如下发送异步请求...

[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
        //Write code you want to call when data is received,
        //Like dismissing loading view and populating UI.
 }];

更新:

//Display alert view, before sending your request..
[alertview show];
//send first request
[NSURLConnection sendAsynchronousRequest:request1 queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){

            //Write code you want to call when data is received,
            //send second request
[NSURLConnection sendAsynchronousRequest:request2 queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){

            //Write code you want to call when data is received,
            //send third request
[NSURLConnection sendAsynchronousRequest:request3 queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
            //Write code you want to call when data is received,
            //dismiss alert view on main thread
dispatch_async(getmainqueue, ^(void) { 
// dismiss alert view... 
});
     }];
     }];

     }];

关于iphone - UIAlertView 出现晚了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18531487/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap