- [NSString stringByAppendingPathComponent:]或者只是 - [NSString stringByAppendingFormat:]用于NSURL的NSStrings?

时间:2012-09-06 21:02:55

标签: objective-c foundation

致电+[NSURL URLWithString:]时,我有两种方法可以构建我的网址:

[[@"http://example.com" stringByAppendingPathComponent:@"foo"] stringByAppendingPathComponent:@"bar"]

[@"http://example.com" stringByAppendingFormat:@"/%@/%@",@"foo",@"bar"];

-[NSString stringByAppendingPathComponent:]似乎是更正确的答案,但除了处理双斜杠外,我是否会使用-[NSString stringByAppendingFormat:]丢失任何内容,如下例所示?

// http://example.com/foo/bar
[[@"http://example.com/" stringByAppendingPathComponent:@"/foo"] stringByAppendingPathComponent:@"bar"] 

// http://example.com//foo/bar  oops!
[@"http://example.com/" stringByAppendingFormat:@"/%@/%@",@"foo",@"bar"];

4 个答案:

答案 0 :(得分:3)

我刚遇到stringByAppendingPathComponent的问题:它在任何地方都删除了双斜杠!:

NSString* string1 = [[self baseURL] stringByAppendingString:partial];
NSString* string2 =  [[self baseURL] stringByAppendingPathComponent:partial];

NSLog(@"string1 is %s", [string1 UTF8String]);
NSLog(@"string2 is %s", [string2 UTF8String]);

表示https://blah.com

的baseURl

和/ moreblah

的一部分

生成两个字符串:

2012-09-07 14:02:09.724 myapp string1是https://blah.com/moreblah

2012-09-07 14:02:09.749 myapp string2是https:/blah.com/moreblah

但出于某种原因,我打电话给blah.com以使用单斜杠获取资源。但它告诉我stringByAppendingPathComponent用于路径 - 不是网址。

这是在运行iOS 5.1的iPhone 4硬件上。

我输出了UTF8字符串,因为我想确保我看到的调试器输出是可信的。

所以我想我是说 - 不要在URL上使用路径,使用一些家庭酿造或库。

答案 1 :(得分:3)

在使用URLS时,您应该使用NSURL方法:

NSURL * url = [NSURL URLWithString: @"http://example.com"];
url = [[url URLByAppendingPathComponent:@"foo"] URLByAppendingPathComponent:@"bar"]

或在Swift中

var url = NSURL.URLWithString("http://example.com")
url = url.URLByAppendingPathComponent("foo").URLByAppendingPathComponent(".bar")

答案 2 :(得分:1)

怎么样:

    [NSString pathWithComponents:@ [@“http://example.com”,@“foo”,@“bar”]]

正如评论中所指出的那样,/在使用NSPathUtitlites.h中的方法时会从协议中删除,因此这是明显的垮台。我能想到的解决方案与我发布的最接近的解决方案是:

[@[ @"http://example.com", @"foo", @"bar" ] componentsJoinedByString:@"/"]

您只需要为路径分隔符使用文字NSString does

  

NSString通常使用“/”作为路径分隔符来表示路径   和'。'作为扩展分隔符。

答案 3 :(得分:0)

stringByAppendingPathComponent的要点是处理双斜杠,但是,你可以这样做:

[[@"http://example.com/" stringByAppendingPathComponent:[NSString stringWithFormat:@"%@/%@", @"foo", @"bar"]]