ios - Encode NSDictionary to send across AFNetworking -


how can urlencode nsdictionary can send across afnetworking.

the code follows:

nsmutabledictionary *rus = [[nsmutabledictionary alloc] init]; [rus setvalue:@"1211" forkey:@"id"]; [rus setvalue:@"33" forkey:@"man"]; 

how can encode nsdictionary can send across afnetworking ?

depends how wish send data:

1) @"application/json" in case use [nsjsonserialization datawithjsonobject:parameters options:self.writingoptions error:error]

2) @"application/x-www-form-urlencoded" in case want create string: ?id=1211&man=33 dictionary rus.

here's code, may not efficient idea:

 nsstring *temp;     int i=0;      for(nsstring *key in options.params.allkeys)     {         nsstring *value = [options.params objectforkey:key];         [parameters setobject:value forkey:key];          if(i==0)         {             temp = [nsstring stringwithformat:@"?%@=%@", key,value];         }         else         {             temp = [nsstring stringwithformat:@"%@&%@=%@", temp, key, value];         }     } 

note: may or may not relevant you, 2 cents:

i use afhttpsessionmanager handles details me including url encoding, pass in desired dictionary:

    nsmutabledictionary *rus = [[nsmutabledictionary alloc] init];     [rus setvalue:@"1211" forkey:@"id"];     [rus setvalue:@"33" forkey:@"man"];      [self post:@"/api/place/nearbysearch" parameters:rus success:^(nsurlsessiondatatask *task, id responseobject) {             nslog(@"nearbyplaces: success");             [self fetchedplacesdata:responseobject block:block];             if(task != nil && task.originalrequest != nil)             {                 nsstring *url = [task.originalrequest.url absolutestring];                 [self savenearbysearchevent:url params:params];             }         } failure:^(nsurlsessiondatatask *task, nserror *error) {             nslog(@"nearbyplaces: error: %@", error);             block(self, nil, error);         }]; 

afhttpsessionmanager encapsulates lot of functionality included serializing data: afurlrequestserialization either json or http request. in case interested on afhttpsessionmanager here's detail:

a) http request here's code afurlrequestserialization.m:

- (nsurlrequest *)requestbyserializingrequest:(nsurlrequest *)request                                withparameters:(id)parameters                                         error:(nserror *__autoreleasing *)error {     nsparameterassert(request);      nsmutableurlrequest *mutablerequest = [request mutablecopy];      [self.httprequestheaders enumeratekeysandobjectsusingblock:^(id field, id value, bool * __unused stop) {         if (![request valueforhttpheaderfield:field]) {             [mutablerequest setvalue:value forhttpheaderfield:field];         }     }];      if (parameters) {         nsstring *query = nil;         if (self.querystringserialization) {             nserror *serializationerror;             query = self.querystringserialization(request, parameters, &serializationerror);              if (serializationerror) {                 if (error) {                     *error = serializationerror;                 }                  return nil;             }         } else {             switch (self.querystringserializationstyle) {                 case afhttprequestquerystringdefaultstyle:                     query = afquerystringfromparameterswithencoding(parameters, self.stringencoding);                     break;             }         }          if ([self.httpmethodsencodingparametersinuri containsobject:[[request httpmethod] uppercasestring]]) {             mutablerequest.url = [nsurl urlwithstring:[[mutablerequest.url absolutestring] stringbyappendingformat:mutablerequest.url.query ? @"&%@" : @"?%@", query]];         } else {             if (![mutablerequest valueforhttpheaderfield:@"content-type"]) {                 [mutablerequest setvalue:@"application/x-www-form-urlencoded" forhttpheaderfield:@"content-type"];             }             [mutablerequest sethttpbody:[query datausingencoding:self.stringencoding]];         }     }      return mutablerequest; } 

b) json

- (nsurlrequest *)requestbyserializingrequest:(nsurlrequest *)request                                withparameters:(id)parameters                                         error:(nserror *__autoreleasing *)error {     nsparameterassert(request);      if ([self.httpmethodsencodingparametersinuri containsobject:[[request httpmethod] uppercasestring]]) {         return [super requestbyserializingrequest:request withparameters:parameters error:error];     }      nsmutableurlrequest *mutablerequest = [request mutablecopy];      [self.httprequestheaders enumeratekeysandobjectsusingblock:^(id field, id value, bool * __unused stop) {         if (![request valueforhttpheaderfield:field]) {             [mutablerequest setvalue:value forhttpheaderfield:field];         }     }];      if (parameters) {         if (![mutablerequest valueforhttpheaderfield:@"content-type"]) {             [mutablerequest setvalue:@"application/json" forhttpheaderfield:@"content-type"];         }          [mutablerequest sethttpbody:[nsjsonserialization datawithjsonobject:parameters options:self.writingoptions error:error]];     }      return mutablerequest; } 

Comments