NSString的stringByAppendingPathComponent:删除http://中的'/'

时间:2010-04-05 16:35:12

标签: iphone cocoa cocoa-touch macos nsstring

我一直在修改一些代码,以便在Mac OS X和iPhone OS之间工作。

我遇到了一些使用NSURL的{​​{1}}(在10.6中添加)的代码,有些人可能知道,这些代码在iPhone SDK中不可用。

我在OS之间使用此代码的解决方案是使用

URLByAppendingPathComponent:

问题是NSString *urlString = [myURL absoluteString]; urlString = [urlString stringByAppendingPathComponent:@"helloworld"]; myURL = [NSURL urlWithString:urlString]; 的{​​{1}}似乎从网址的http://部分删除了其中一个。

这是预期的行为还是错误?


修改

好的,所以我在问上面的问题时有点太快了。我重新阅读了文档,确实说:

  

请注意,此方法仅适用于文件路径(例如,不是URL的字符串表示)

但是,如果您需要将路径组件附加到iPhone上的URL,它没有为正确的方向提供任何指示......

我总是可以手动执行,添加/如果需要和额外的字符串,但我希望尽可能接近原始的Mac OS X代码......

5 个答案:

答案 0 :(得分:15)

我会在NSURL上实现一个myURLByAppendingPathComponent:方法来做同样的事情。给它一个不同名称的原因是它不会覆盖Apple提供的方法,当Apple开始将10.6 API移植到iPhone时(所以“我的”只是一个例子 - 重点是它不太可能有人否则会写一个具有该名称的方法)。

在我看来,你只想弄乱路径而不是整个网址。这是一个未经测试的例子:

- (NSURL *)myURLByAppendingPathComponent:(NSString *)component {
    NSString *newPath = [[self path] stringByAppendingPathComponent:component];
    return [[[NSURL alloc] initWithScheme: [self scheme] 
                                     host: [self host] 
                                     path: newPath]
                                     autorelease];
}

它只适用于具有类似文件路径的URL,但我很确定Apple方法的工作方式相同。无论如何,希望它能帮助你朝着正确的方向前进。

答案 1 :(得分:12)

URLByAppendingPathComponent

自iOS 4起,URLByAppendingPathComponent在iOS上可用并正确处理两个斜杠。 (OS X从10.6开始就有了它,正如Chuck指出的那样)

myURL = [myURL URLByAppendingPathComponent:@"hello world"]
// http://foo/bar/hello%20world

请注意,与stringByAppendingPathComponent不同,此方法会转义参数。

URLWithString:relativeToURL:

或者,有URLWithString:relativeToURL:,它不会逃脱。因此,如果url组件已经转义,请使用:

myURL = [NSURL URLWithString:@"hello%20world" relativeToURL:myURL]
// http://foo/bar/hello%20world

请注意,myURL需要在此处以斜杠结尾,并且添加的段不得有前导斜杠。

答案 2 :(得分:4)

NSString Reference说明stringByAppendingPathComponent:

  

请注意,此方法仅适用于   文件路径(例如,不是字符串   网址表示。)

所以,我认为这是“不要那样做”的情况。

改为使用-stringByAppendingString:

答案 3 :(得分:2)

有一个简单的工作。 使用[NSString stringWithFormat:@“%@ /%@”,服务器,文件]工作正常。

E.g。服务器:ftp://www.server.com和文件:file.txt

答案 4 :(得分:0)

我已经提供了一些处理此问题的代码:https://gist.github.com/1256354

在我的博客上,我写了一些进一步的解释:http://koolistov.net/blog/2011/10/02/right-path-to-url-parameters/