【问题标题】:iOS: Activity Indicator is not showing while calling post APIiOS:调用 post API 时未显示活动指示器
【发布时间】:2018-04-20 05:54:02
【问题描述】:

这是我为在navigationBar 上显示activityIndicator 而编写的代码。

在我的每个视图的项目中,加载器都显示它在屏幕中间或网络activityIndicatornavigation 上的加载器上运行良好。

但是当我尝试调用下面的 post 方法时,activityIndicator 没有显示(仅在此方法中它不起作用。)

我尝试了很多以编程方式编写和使用storyboard的方法。

场景一:不输入回复内容/消息,点击提交按钮,就会出现activityIndicator

场景 2:如果我输入了任何回复内容/消息,那么 activityIndicator 将不会显示。

您可以观看此视频:https://youtu.be/G_UZ_gLRlr8

 @interface ViewController ()
    {
       UIActivityIndicatorView *activityIndicator;
    }
    @end

- (void)viewDidLoad {
        [super viewDidLoad];


            //adding activity indicator on the navigation bar

            activityIndicator =
            [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];

            activityIndicator.color=[UIColor blackColor];

            UIBarButtonItem * barButton =
            [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];

            // Set to Left or Right
            [[self navigationItem] setRightBarButtonItem:barButton];

    }

- (IBAction)submitButtonClicked:(id)sender {


    [activityIndicator startAnimating];



    if([_messageTextView.text isEqualToString:@""] || [_messageTextView.text length]==0)
    {
        [utils showAlertWithMessage:@"Enter the reply content.It can not be empty." sendViewController:self];

    }else
    { 
        [self replyTicketMethodCall]; 
    }
}

-(void)replyTicketMethodCall
{

    if ([[Reachability reachabilityForInternetConnection]currentReachabilityStatus]==NotReachable)
    {
    //connection unavailable
    //[utils showAlertWithMessage:NO_INTERNET sendViewController:self];
    [RKDropdownAlert title:APP_NAME message:NO_INTERNET backgroundColor:[UIColor hx_colorWithHexRGBAString:FAILURE_COLOR] textColor:[UIColor whiteColor]];

}else{


    @try{




        NSString *urlString=[NSString stringWithFormat:@"%@helpdesk/reply?token=%@",[userDefaults objectForKey:@"companyURL"],[userDefaults objectForKey:@"token"]];

        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
        [request setURL:[NSURL URLWithString:urlString]];
        [request setHTTPMethod:@"POST"];

        NSMutableData *body = [NSMutableData data];

        NSString *boundary = @"---------------------------14737809831466499882746641449";
        NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
        [request addValue:contentType forHTTPHeaderField:@"Content-Type"];

        // attachment parameter
        [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"media_attachment[]\"; filename=\"%@\"\r\n", file123] dataUsingEncoding:NSUTF8StringEncoding]];

        [body appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", typeMime] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[NSData dataWithData:attachNSData]];
        [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];


        // reply content parameter
        [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"reply_content\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[_messageTextView.text dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];


        NSString * tickerId=[NSString stringWithFormat:@"%@",globalVariables.iD];
        // ticket id parameter
        [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"ticket_id\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[tickerId dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

        // close form
        [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

        // set request body
        [request setHTTPBody:body];

        NSLog(@"Request is : %@",request);

        //return and test
        NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
        NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

        NSLog(@"ReturnString : %@", returnString);

        NSError *error=nil;
        NSDictionary *jsonData=[NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&error];
        if (error) {
            return;
        }

        NSLog(@"Dictionary is : %@",jsonData);
        // "message": "Successfully replied"



        if ([jsonData objectForKey:@"message"]){

            NSString * msg=[jsonData objectForKey:@"message"];


            if([msg isEqualToString:@"Successfully replied"])
            {

                [RKDropdownAlert title:NSLocalizedString(@"success", nil) message:NSLocalizedString(@"Posted your reply.", nil)backgroundColor:[UIColor hx_colorWithHexRGBAString:SUCCESS_COLOR] textColor:[UIColor whiteColor]];

                [[NSNotificationCenter defaultCenter] postNotificationName:@"reload_data" object:self];

                [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];

            }
            else if ([jsonData objectForKey:@"message"])
            {

                NSString *str=[jsonData objectForKey:@"message"];

                if([str isEqualToString:@"Token expired"])
                {
                    MyWebservices *web=[[MyWebservices alloc]init];
                    [web refreshToken];
                    [self replyTicketMethodCall];

                }
            }
            else
            {
                [self->utils showAlertWithMessage:@"Something went wrong. Please try again." sendViewController:self];
            }
            NSLog(@"Thread-Ticket-Reply-closed");


        }

    }@catch (NSException *exception)
    {
        [utils showAlertWithMessage:exception.name sendViewController:self];
        NSLog( @"Name: %@", exception.name);
        NSLog( @"Reason: %@", exception.reason );
        return;
    }
    @finally
    {
        NSLog( @" I am in replytTicket method in TicketDetail ViewController" );

    }

}

}

所以这就是我面临的问题。 出了什么问题?有什么解决办法吗?

【问题讨论】:

  • 您发布了一段很长的代码,请您具体说明您遇到的问题,以便这里的人可以轻松帮助您。
  • 你能在@try方法开始的地方设置activityIndi​​cator吗?它应该可以工作。
  • 调用后 - (IBAction)submitButtonClicked:(id)sender 这个方法,活动指示器不显示
  • @RB1509 我会检查的。
  • 试试Debug View Hierarchy,看看加载器是否存在。

标签: ios objective-c loader uiactivityindicatorview activity-indicator


【解决方案1】:

使用这个方法

 [self performSelector:@selector(replyTicketMethodCall) withObject:self afterDelay:5.0];

而不是这个

[self replyTicketMethodCall];

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多