gpt4 book ai didi

ios - 调用网络服务时显示 UIActivityIndi​​cator

转载 作者:行者123 更新时间:2023-11-28 20:09:10 24 4
gpt4 key购买 nike

我需要在等待 Web 服务的响应时显示 UIActivityIndi​​cator。我到底应该把它的代码放在哪里??它不是这样工作的。事件指示器不显示。

我需要使用异步请求才能显示它吗??

    -(void)callWebService
{
[self.customercareSearchbar resignFirstResponder];
[self.SRResultDictionary removeAllObjects];
NSLog(@"web service called");
NSString *srn = _SRNumber;
NSString *serviceURL = [NSString stringWithFormat:@"https://abcdef...];

@try {
UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[self.view addSubview:activity];

activity.center = self.view.center;
[self.view bringSubviewToFront:loadView];
activity.hidesWhenStopped = YES;
[activity setHidden:NO];

[activity startAnimating];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:serviceURL]];
NSURLResponse *serviceResponse = nil;
NSError *err = nil;

NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&serviceResponse error:&err];

[activity stopAnimating];

NSMutableDictionary *parsedData = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&err];

if(!parsedData)
{
NSLog(@"data not parsed");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ERROR" message:@"Problem in Network. Please Try Again!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
[self.customerCareTableView setHidden:YES];
}
else
{
NSLog(@"parsed");
NSLog(@"parsed.. the size is %lu", (unsigned long)[parsedData count]);
NSLog(@"%@", parsedData);

NSString *status = [parsedData objectForKey:@"ns:Status"];
NSLog(@"the status is %@", status);
if([status isEqualToString:@"Success"])
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

if([[prefs objectForKey:@"SwitchState"] isEqualToString:@"OFF"])
{
//do nothing
}

else
{
[self saveNumberInDatabase:srn];
}

NSMutableDictionary *third = [parsedData objectForKey:@"ListOfXrxLvServiceRequest"];
NSLog(@"internal dict is %@", third);

self.SRResultDictionary = [third objectForKey:@"ServiceRequest"];

[self.customerCareTableView reloadData];
[self.customerCareTableView setHidden:NO];
}

else if([status isEqualToString:@"Record Not Found"])
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Invalid Entry" message:@"Please enter a valid Service Request Number" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
[self.customerCareTableView setHidden:YES];
}

else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ERROR" message:@"Problem in Network. Please Try Again!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
[self.customerCareTableView setHidden:YES];
}
}
}

@catch (NSException *exception)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NULL message:@"Problem In Network Connection. Please Try Again!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[self.customerCareTableView setHidden:YES];
}
@finally {

}
}

最佳答案

是的,问题是同步请求。

如果可以发送 ASynchronous 请求,那么尝试这样做。

[NSURLConnection sendAsynchronousRequest:request queue:nil completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

// stop activity

// write other code you want to execute

}];

关于ios - 调用网络服务时显示 UIActivityIndi​​cator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20944193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com