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
Post a Comment