5

打电话时,+[NSURL URLWithString:]我有两个选项来构建我的 URL:

[[@"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

4 回答 4

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 用于路径 - 而不是 url。

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

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

所以我想我是在说 - 不要在 URL 上使用路径,使用一些自制软件或库。

于 2012-09-07T18:07:07.207 回答
3

当您使用 URLS 时,您应该使用以下NSURL方法:

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

或在斯威夫特

var url = NSURL.URLWithString("http://example.com")
url = url.URLByAppendingPathComponent("foo").URLByAppendingPathComponent(".bar")
于 2014-03-09T23:46:32.497 回答
1

怎么样:

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

正如评论中指出的那样,/当使用 from 的方法时,a 会从协议中剥离NSPathUtitlites.h,所以这是明显的失败。我能想出的最接近我发布的原始解决方案是:

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

NSString您只需要使用一个文字作为路径分隔符,这就是.

NSString一般用“/”作为路径分隔符和“.”表示路径 作为扩展分隔符。

于 2012-09-06T21:12:32.867 回答
0

stringByAppendingPathComponent 的重点是处理双斜杠,但是,您可以执行以下操作:

[[@"http://example.com/" stringByAppendingPathComponent:[NSString stringWithFormat:@"%@/%@", @"foo", @"bar"]]
于 2012-09-06T21:05:25.673 回答