在ObjectiveC中从NSDictionary对象创建URL查询参数

在ObjectiveC中从NSDictionary对象创建URL查询参数

由于所有的URL处理对象都位于标准的Cocoa库(NSURL,NSMutableURL,NSMutableURLRequest等)中,我知道我必须忽略一种以编程方式编写GET请求的简单方法。

目前我手动追加“?” 后跟由“&”连接的名称值对,但我的所有名称和值对都需要手动编码,因此NSMutableURLRequest在尝试连接到URL时不会完全失败。

这感觉就像我应该能够使用预先出炉的API ......是否有任何开箱即可将查询参数的NSDictionary附加到NSURL?我还有另一种方法吗?


慕斯709654
浏览 682回答 3
3回答

aluckdog

我想使用Chris的答案,但它不是为自动引用计数(ARC)编写的,所以我更新了它。我以为我会粘贴我的解决方案以防其他人遇到同样的问题。 注意:self在适当的地方替换实例或类名。+(NSString*)urlEscapeString:(NSString *)unencodedString  {     CFStringRef originalStringRef = (__bridge_retained CFStringRef)unencodedString;     NSString *s = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,originalStringRef, NULL, (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", kCFStringEncodingUTF8);     CFRelease(originalStringRef);     return s;}+(NSString*)addQueryStringToUrlString:(NSString *)urlString withDictionary:(NSDictionary *)dictionary{     NSMutableString *urlWithQuerystring = [[NSMutableString alloc] initWithString:urlString];     for (id key in dictionary) {         NSString *keyString = [key description];         NSString *valueString = [[dictionary objectForKey:key] description];         if ([urlWithQuerystring rangeOfString:@"?"].location == NSNotFound) {             [urlWithQuerystring appendFormat:@"?%@=%@", [self urlEscapeString:keyString], [self urlEscapeString:valueString]];         } else {             [urlWithQuerystring appendFormat:@"&%@=%@", [self urlEscapeString:keyString], [self urlEscapeString:valueString]];         }     }     return urlWithQuerystring;}
打开App,查看更多内容
随时随地看视频慕课网APP