IOS не имеет поддержки, чтобы сделать это как однострочника, но вы можете сделать это:
@interface NSString (URLEncoding)
- (NSString *)urlEncodedUTF8String;
@end
@interface NSURLRequest (DictionaryPost)
+ (NSURLRequest *)postRequestWithURL:(NSURL *)url
parameters:(NSDictionary *)parameters;
@end
@implementation NSString (URLEncoding)
- (NSString *)urlEncodedUTF8String {
return (id)CFURLCreateStringByAddingPercentEscapes(0, (CFStringRef)self, 0,
(CFStringRef)@";/?:@&=$+{}<>,", kCFStringEncodingUTF8);
}
@end
@implementation NSURLRequest (DictionaryPost)
+ (NSURLRequest *)postRequestWithURL:(NSURL *)url
parameters:(NSDictionary *)parameters {
NSMutableString *body = [NSMutableString string];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/x-www-form-urlencoded"
forHTTPHeaderField:@"Content-Type"];
for (NSString *key in parameters) {
NSString *val = [parameters objectForKey:key];
if ([body length])
[body appendString:@"&"];
[body appendFormat:@"%@=%@", [[key description] urlEncodedUTF8String],
[[val description] urlEncodedUTF8String]];
}
[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
return request;
}
@end
Тогда это так же просто, как:
NSURL *url = [NSURL URLWithString:@"http://posttestserver.com/post.php"];
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:42], @"number",
@"apple", @"brand", nil];
NSURLRequest *request = [NSURLRequest postRequestWithURL:url parameters:params];
[NSURLConnection sendAsynchronousRequest:request queue:nil completionHandler:nil];
Пожалуйста, обратите внимание, что в этом Например, мы не заботимся об ответе. Если вы заботитесь об этом, поставьте блок, чтобы вы могли с ним что-то сделать.
Поддерживает ли это комплексные объекты? Словарь с и множество словарей? – mwoods79
Теперь вы можете использовать метод «stringByRemovingPercentEncoding» NSString вместо расширения категории NSString в этом ответе. (iOS 7.0+) – Salx