-(void)getDataFromServer: (NSMutableDictionary *)dict
{
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/doSomething",MainURL ]];
[AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:nil parameters:dict];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
_myArray = JSON;
[_myTableView reloadData]; //Or do some other stuff that are related to the current `ViewController`
}
failure:^(NSURLRequest *request , NSURLResponse *response , NSError *error , id JSON)
{
NSLog(@"request: %@",request);
NSLog(@"Failed: %@",[error localizedDescription]);
}];
[httpClient enqueueHTTPRequestOperation:operation];
}
Sto usando il codice sopra in 7 diversi posti in una delle mie app. Il pezzo esatto di codice è duplicato in 7 dei miei ViewControllers
. Quello che in genere facevo era mettere il metodo che voglio usare in una classe NSObject e assegnarlo e usarlo quando mai ho bisogno ma poiché sopra è Async e usando i blocchi non posso semplicemente restituire il JSON allo ViewController
che ha chiamato e devono copiare & incollare il metodo di cui sopra in ogni ViewController
ho bisogno di.Passaggio di blocchi a un metodo di rete AF?
il mio obiettivo è quello di avere la precedenza in un solo posto nel mio app e ancora in grado di chiamare da diverso ViewControllers
intorno alla mia app e ottenere i dati che mi servono Vorrei evitare di utilizzare un osservatore come NSNotification
o KVO
e cercare una soluzione più elegante. Dopo alcune letture ho notato la possibilità di passare blocchi in giro. È una possibile soluzione con quanto sopra? Un esempio di codice sarebbe apprezzato.
Oltre alla risposta di Gabriele in basso, è consigliabile evitare di far ruotare un nuovo AFHTTPClient per ogni richiesta. –
Stavo modificando la mia risposta esattamente per quello. Grazie per la nota. –