Como implementar corretamente uma classe de serviços em meu aplicativo iOS?
Meu header atual: implementar uma classe de modelo especificamente para chamadas de serviço para meu aplicativo de trilhos.
Aqui está o cenário:
Eu tenho uma classe chamadaServiço que é uma subclasse de NSObject.O arquivo de implementação tem alguns métodos definidos ... vamos verdoSignUp.estou usandoAFNetworking para se comunicar com a API.Do meuSignUpViewController, Eu crio uma instância do meuServiço classe e chamadadoSignUpO método funciona como esperado e recebo a resposta adequada do servidor.Agora vem a parte que eu não entendo completamente:
AFNetworking utiliza blocos para suas chamadas de serviço.Dentro desucesso bloco eu chamo um método auxiliar chamadohandleSignUp (também emServiço classe). Esse método essencialmente analisa o JSON e eu crio um novoDo utilizador (Subclasse NSObject) fora disso. ohandSignUp método, em seguida, retorna oDo utilizador objeto.Neste ponto eu tenho um novoDo utilizador objeto e eu preciso enviar esse objeto de volta para o meuSignUpViewController... Como eu posso fazer isso?
Devo tentar adicionar esse objeto aoAppDelegate e acessá-lo a partir doSignUpViewController? Esta solução poderia funcionar para acessar várias propriedades globais, mas quandoSignUpViewController sabe quando acessá-lo?Devo tentar adicionar uma referência aoSignUpViewController noServiço classe? Isso parece contraproducente ... Eu poderia também adicionar o métododoSignUp ehandSignUp aoSignUpViewController. Parece-me o meuServiço A classe não deve estar ciente de nenhum outro viewControllers.Veja abaixo os meus exemplos de código:
Service.h
//Service.h
#import <UIKit/UIKit.h>
#import "AFNetworking.h"
@interface Services : NSObject
- (void) doSignUp:(NSMutableDictionary*)params;
@end
Service.m
// Service.m
#import "Services.h"
#import "Config.h"
@implementation Services
- (void) doSignUp:(NSMutableDictionary*)params {
NSURL *url = [NSURL URLWithString:@"http://MYURL.COM"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"signup.json" parameters:params];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
[self handleSignUp:JSON];
} failure:nil];
[operation start];
}
- (User*) handleSignUp:(NSMutableArray*)json {
User * user = nil;
if ([[json valueForKey:@"success"] isEqualToString:@"true"]) {
// create user here ...
}
return user;
}
SignUpViewController.h
#import "Service.h"
@interface SignUpViewController : UIViewController {
Service * service;
}
@property (nonatomic, strong) Service * service;
SignUpViewController.m
#import "SignUpViewController.h"
@interface SignUpViewController ()
@end
@implementation SignUpViewController
@synthesize service = __service;
- (IBAction) initSignUp:(id)sender {
// create params...
[self.service doSignUp:params];
}
Mais uma vez, todo esse código faz o que é suposto fazer ... Eu só preciso saber como tudo deve se comunicar. Como posso alertarSignUpViewController ahandleSignUp foi chamado e um novoDo utilizador objeto está disponível?
Obrigado pelo seu tempo, Andre