iOS:调用后 API 时不显示活动指示器



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

在我的每个视图的项目中,加载器显示它在屏幕中间或在网络activityIndicatornavigation加载器上工作正常。

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

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

场景1:无需输入回复内容/消息,如果单击提交按钮,则会出现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:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="media_attachment[]"; filename="%@"rn", file123] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"Content-Type: %@rnrn", typeMime] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[NSData dataWithData:attachNSData]];
        [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];

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

        NSString * tickerId=[NSString stringWithFormat:@"%@",globalVariables.iD];
        // ticket id parameter
        [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="ticket_id"rnrn"] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[tickerId dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];
        // close form
        [body appendData:[[NSString stringWithFormat:@"--%@--rn", 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" );
    }
}

}

这就是我面临的问题。出了什么问题?有什么解决方案吗?

使用此方法

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

而不是这个

[self replyTicketMethodCall];

最新更新