为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯709654 2019-08-26 19:21:08
在ObjectiveC中从NSDictionary对象创建URL查询参数由于所有的URL处理对象都位于标准的Cocoa库(NSURL,NSMutableURL,NSMutableURLRequest等)中,我知道我必须忽略一种以编程方式编写GET请求的简单方法。目前我手动追加“?” 后跟由“&”连接的名称值对,但我的所有名称和值对都需要手动编码,因此NSMutableURLRequest在尝试连接到URL时不会完全失败。这感觉就像我应该能够使用预先出炉的API ......是否有任何开箱即可将查询参数的NSDictionary附加到NSURL?我还有另一种方法吗?
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

我想使用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;}


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 713 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信