하나는 다음과 같습니다공통 API 요청 처리기 내 응용 프로그램에서 요청
이-(void)login
{
@try {
NSString *str = [NSString stringWithFormat:TGURL_LOGIN];
NSURL *url = [NSURL URLWithString:str];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
NSDictionary *requestData = @{@"---": ----,
@"---": ----,
@"OutResponse": [NSNumber numberWithInteger:0]};
NSError *error;
NSData *postData = [NSJSONSerialization dataWithJSONObject: requestData options:0 error:&error];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPBody:postData];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
__block int iSuccess = 0;
[NSURLConnection
sendAsynchronousRequest:request
queue:queue
completionHandler:^(NSURLResponse *response,
NSData *data,
NSError *error) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
if ([data length] >0 && error == nil){
dispatch_async(dispatch_get_main_queue(), ^{
iSuccess = [self parseResponse:data];
});
dispatch_async(dispatch_get_main_queue(), ^{
if(iSuccess == 1)
{
[[NSUserDefaults standardUserDefaults] setObject:_email.text forKey:@"EmailText"];
[[NSUserDefaults standardUserDefaults] setObject:_password.text forKey:@"PasswordText"];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"User_Logged_In"];
[[NSUserDefaults standardUserDefaults]synchronize];
[TGProjectHandler saveCookiesToDefaults];
[self getUserID];
}
else if(iSuccess == 3)
{
[[NSUserDefaults standardUserDefaults] setObject:_email.text forKey:@"EmailText"];
[[NSUserDefaults standardUserDefaults] setObject:_password.text forKey:@"PasswordText"];
[[NSUserDefaults standardUserDefaults]synchronize];
[self.view endEditing:YES];
[TGProjectHandler saveCookiesToDefaults];
[TGProjectHandler removeLoadingIndicator];
[self performSegueWithIdentifier:@"ShowJoinGroup" sender:nil];
}
else
{
[[[UIAlertView alloc] initWithTitle: NSLocalizedString(@"Login_failed", nil)
message:NSLocalizedString(@"Invalid_credentials", nil)
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil] show];
[TGProjectHandler removeLoadingIndicator];
self.view.userInteractionEnabled = YES;
}
});
}
else if ([data length] == 0 && error == nil){
NSLog(@"Empty Response, not sure why?");
}
else if (error != nil){
NSLog(@"%@", error.description);
self.view.userInteractionEnabled = YES;
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Login_failed", nil)
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil] show];
[TGProjectHandler removeLoadingIndicator];
self.view.userInteractionEnabled = YES;
}
}];
}
@catch (NSException *exception) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
}
이 바로 서비스 호출 중 하나입니다. 백 가지를 가져라. 현재 나는 컨트롤러 자체에 이것을 쓰고있다. (나쁜 접근법, 나는 알고있다. :)).
하나의 클래스에서 모든 요청 기반 코드를 작성하고 어디서나 액세스 할 수있는 방법을 찾고 있습니다.
잠시 동안 나는 싱글 톤을 만들 생각을했습니다. 그러나 이것에 대한 싱글 톤을 만드는 것에 대해서는 확실하지 않습니다.
또한 프로토콜을 만드는 방법에 대해 생각해 보았지만 마침내 컨트롤러에서 구현해야했습니다.
내가 갈 수있는 다양한 패턴이 무엇인지, 그래서 내가 어디에서나 반복되는 코드에 대한 공통 클래스를 갖게되었습니다.
당신은 NSObject의 클래스를 만드는 시도 할 수 있습니다, 당신은 당신의 websersevice 게시물을 선언하고 방법을 얻을 수있는 곳. 해당 webservice 클래스에 webservice 이름과 매개 변수를 전달하고 데이터가 필요한 클래스에서 응답을 받아야합니다. 웹 서비스 응답을위한 완료 핸들러를 만들 수 있습니다. –
@RahulPatel : 완료 핸들러를 처리하는 방법? – Nitish