У меня есть метод, который отправляет HTTP
данные. После получения ответа от API
я хочу отобразить UIAlertController
на основе кодов состояния.
Предположим, полученный код состояния 409 , поэтому контроллер скажет "данные уже существуют" .
Как представить alert controller
и в каком классе, классе обслуживания или любом другом view controller
?
ViewController.h
- (IBAction)logIn:(id)sender {
if (username.text == nil || [password.text isEqualToString:@""])
{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:
@"all the fields are mendetary"
message:@"missing username or password " preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *action = [UIAlertAction
actionWithTitle:@"OKAY" style:UIAlertActionStyleDefault handler:^(UIAlertAction *_Nonnull action)
{
//[self dismissViewControllerAnimated:YES completion:nil];
}];
[alert addAction:action];
[self presentViewController:alert animated:YES completion:nil];
}
else
{
[[service SharedInstance] logIn:[NSDictionary dictionaryWithObjectsAndKeys:username.text,@"username",password.text,@"password",nil] params:@"logIn" block:^(const BOOL success, id resultObject, NSError *error )
{
// [self performSegueWithIdentifier:@"Loggedin" sender:self];
}];
}
username.text =@"";
password.text =@"";
}
Service.m
-(void)logIn:(NSDictionary *)Details params:(NSString *)params block:(ResponseBlock)block{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSError *error;
NSString *URL = @"http://localhost:8080";
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:nil delegateQueue:nil];
NSString *requestURL = [URL stringByAppendingString:@"/api/signupUser"];
NSURL *url = [NSURL URLWithString:requestURL]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0]; NSData *data = [params dataUsingEncoding:NSDataBase64Encoding64CharacterLineLength];
NSString *base64Encoded = [data base64EncodedStringWithOptions:0];
NSLog(@"base64Encoded%@",base64Encoded);
NSString *basicString = @"Basic";
basicString = [NSString stringWithFormat:@"%@%@",basicString,base64Encoded];
NSLog(@"basicString%@",basicString);
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:basicString forHTTPHeaderField:@"Authorization"];
[request setHTTPMethod:@"POST"];
NSData *bodyData = [NSJSONSerialization dataWithJSONObject:Details options:0 error:&error];
[request setHTTPBody:bodyData];NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * data, NSURLResponse *response, NSError *error)
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
long statusCode =[httpResponse statusCode];
NSLog(@"response status code: %ld", statusCode);
f (error)
{
block(NO, response,error);
}
else
{
NSError *err = nil;
id responseData = [NSJSONSerialization
JSONObjectWithData:data options:kNilOptions error:&err];
NSDictionary* headers= [(NSHTTPURLResponse *)response allHeaderFields];
NSLog(@"all header fields %@",headers);
[defaults removeObjectForKey:@"userToken"];
NSLog(@"token %@",[defaults valueForKey:@"userToken"]);
NSDate *expireDate = [[NSDate date]dateByAddingTimeInterval:60*25];
[defaults setObject:expireDate forKey:@"sessionDate"];
if(err)
{
block(NO, response, error);
}
else
{
block(YES, responseData,nil);
}
[task cancel];
}
}];
[task resume];
}
@end