致电+[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"];
答案 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]);
的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"]]