假设我有一个NSURL?无论它是否已经有一个空的查询字符串,我如何向NSURL中的query添加一个或多个参数?也就是说,有人知道该功能的实现吗?

- (NSURL *)URLByAppendingQueryString:(NSString *)queryString

所以它满足这个NSURL+AdditionsSpec.h文件:

#import "NSURL+Additions.h"
#import "Kiwi.h"

SPEC_BEGIN(NSURL_AdditionsSpec)

describe(@"NSURL+Additions", ^{
    __block NSURL *aURL;

    beforeEach(^{
        aURL = [[NSURL alloc] initWithString:@"http://www.example.com"];
        aURLWithQuery = [[NSURL alloc] initWithString:@"http://www.example.com?key=value"];
    });

    afterEach(^{
        [aURL release];
        [aURLWithQuery release];
    });

    describe(@"-URLByAppendingQueryString:", ^{
        it(@"adds to plain URL", ^{
            [[[[aURL URLByAppendingQueryString:@"key=value&key2=value2"] query] should]
             equal:@"key=value&key2=value2"];
        });

        it(@"appends to the existing query sting", ^{
            [[[[aURLWithQuery URLByAppendingQueryString:@"key2=value2&key3=value3"] query] should]
             equal:@"key=value&key2=value2&key3=value3"];
        });
    });
});

SPEC_END

推荐答案

正如其他人提到的,可以使用NSURLComponents来构建URL.

@implementation NSURL (Additions)

- (NSURL *)URLByAppendingQueryParameters:(NSDictionary *)queryParameters
{        
    NSURLComponents *components = [[NSURLComponents alloc] initWithURL:self resolvingAgainstBaseURL:NO];
    NSMutableArray *queryItems = [NSMutableArray array:components.queryItems];
    for (NSString *key in [queryParameters allKeys]) {
        NSURLQueryItem *queryItem = [[NSURLQueryItem alloc] initWithName:key value:queryParameters[key]];
        [queryItems addObject:queryItem];
    }
    components.queryItems = queryItems;
    return [components URL];
}

@end

Objective-c相关问答推荐

导航回上一个视图控制器

MKMapView 上的 UIPanGestureRecognizer?

iOS - 如何预加载键盘?

如何创建圆形按钮?

NSLocalizedString 格式

ios 13 - 带有 UISearchBar _searchField 的自定义 SearchBar 不起作用

Facebook 的 UIActivityViewController 不显示默认文本

如何更改 UICollectionView 中的滚动方向?

如何计算多边形的圆角?

如何在 iPhone SDK 中使用自定义字体?

无法访问 dispatch_async 中的全局变量:变量不可赋值(缺少 _block 类型说明符)

iOS6:supportedInterfaceOrientations 不起作用(被调用但界面仍然旋转)

iOS 5:对 UIAppearance 感到好奇

主队列上的 performSelectorOnMainThread: 和 dispatch_async() 有什么区别?

检测 UITableView 滚动

[NSMutableArray array] 与 [[NSMutableArray alloc] init] 之间的区别

iPhone:如何确定线程是否是主线程?

状态栏文本 colored颜色 iOS 7

如何将 UITableView 滚动到特定位置

info.plist 中的Application Requires iPhone Environment键是什么意思?