5

私はフォームのNSURLを持っています

"http://abc.def.com:1234/stuff/"

それに追加したいので、最終的なURLは次のようになります

"http://abc.def.com:1234/stuff/?x=123".

しかし、私がこれを行う場合

url = [NSURL URLWithString:@"http://abc.def.com:1234/stuff/?"];
url = [url URLByAppendingPathComponent:@"x=123"];

結果は

http://abc.def.com:1234/stuff/x=123?

(URLByAppendingPathExtension を使用した場合も同じ結果になります)。

しかし、私がこれを行う場合

url = [NSURL URLWithString:@"http://abc.def.com:1234/stuff/?"];
url = [url URLByAppendingPathComponent:@"x=123"];

結果は

http://abc.def.com:1234/stuff/%3Fx=123

(URLByAppendingPathExtension を使用した場合も同じ結果になります)。

どちらも私が求めているものではありません。"http://abc.def.com:1234/stuff/?x=123" の最終結果を取得するにはどうすればよいですか?

4

2 に答える 2

8

ここでの最も簡単な答えは、古い URL をベース URL として使用して新しい URL を作成することだと思います。

url = [NSURL URLWithString:@"?x=123" relativeToURL:url]

これは、ロジックをチェックする単体テストです

- (void)testCreatingQueryURLfromBaseURL
{
    NSURL *url = [NSURL URLWithString:@"http://foo.com/bar/baz"];

    url = [NSURL URLWithString:@"?x=1&y=2&z=3" relativeToURL:url];

    STAssertEqualObjects([url absoluteString], @"http://foo.com/bar/baz?x=1&y=2&z=3", nil);
}
于 2012-04-24T21:40:13.617 に答える
5

必要に応じて作成したから、実際のNSURLオブジェクトを最後に作成します。NSString

NSString *urlString = @"http://www.site.com/";
if (some condition)
    urlString = [urlString stringByAppendingString:@"?x=123"];

NSURL *url = [NSURL URLWithString:urlString];
于 2012-04-24T19:49:12.747 に答える