我想使用NSString文件Paths还是NSURL?

时间:2012-07-18 23:08:01

标签: iphone ios

许多类都有与NSStrings一起使用的版本作为filePath或NSURL。一个例子:

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
- (BOOL)copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError **)error

是否有/明确/偏好使用一个而不是另一个?我正在寻找关于该主题的文档中的注释。

2 个答案:

答案 0 :(得分:1)

它真的取决于你。但是有很多东西只使用URL。

您可以轻松地从NSURL转到路径。但走另一个方向需要一些规范化。

使用路径,例如上面的方案已经给你一个不正确的网址。

NSString *pathString = @"file://localhost/etc..../Document.txt";
NSURL *fileURL = [NSURL fileURLWithPath:pathString];// This will not work.
但是,如果正确初始化,您可以期望来自URL的路径是正确的路径。

NSURL *fileURL = [NSURL URLWithString:pathString];
NSURL *sanePath = fileURL.path;

因此,您可以通过3个步骤获得正确的网址

NSURL *fileURL = [NSURL URLWithString:pathString];
NSURL *sanePath = fileURL.path;

// You can at this point use the Path and expect it will be correct.

fileURL = [NSURL fileURLWithPath:sanePath];

// You can at this point use fileURL and know it will be a correct fileURL with file://.

或者您可以检查方案以确定它是否正确。但这是我遇到的AVAsset问题,因为它不会仅从路径加载NSURL。它必须是fileURL

祝你好运。 :)

答案 1 :(得分:1)

This post

  

“通常对于路径相关的操作,您应该更喜欢NSURL   NSString因为可以更有效地存储路径信息   在NSURL中(根据NSFileManager的类引用)。所以我   会建议您使用NSURL。

     

NSURL还有URLByAppendingPathComponent:和   URLByAppendingPathExtension:因此也提供了便利“