这是我为在navigationBar
上显示activityIndicator
而编写的代码。
在我的每个视图的项目中,加载器显示它在屏幕中间或在网络activityIndicator
或navigation
加载器上工作正常。
但是当我尝试调用下面的 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];