如何获取应用程序文档目录 iPhone 的 URL

Posted

技术标签:

【中文标题】如何获取应用程序文档目录 iPhone 的 URL【英文标题】:How to get URL for application's document directory iPhone 【发布时间】:2011-04-09 21:37:18 【问题描述】:

此代码是 Core Data 的一部分。 URLsForDirectory.... 方法不能在 ios

/**
 Returns the URL to the application's Documents directory.
*/
- (NSURL *)applicationDocumentsDirectory

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

【问题讨论】:

您需要 URL,还是只需要文档路径? 【参考方案1】:

另一种解决方案是使用 -[NSFileManager URLsForDirectory:inDomains:] 方法并从返回的 NSArray 中获取路径:

目标-C:

NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *documentsURL = [paths lastObject];

斯威夫特:

let paths = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
let documentsURL = paths[0] as! NSURL

iOS 4.0+ 支持此功能

【讨论】:

你为什么要访问 ObjC 中的 lastObject 和 Swift 中的 [0] aka firstObject?只是询问兴趣... paths.first 将返回一个可选值。为了简单起见,这里使用了下标访问器,因此我们不必处理类型大小写和可选展开。 - [NSArray firstObject]- [NSArray lastObject] 定义相同。实施并没有说什么不同。能否提供更多背景资料? @JulianF.Weinert,我们假设该目录只有一个 url。在这种假设下,您可以在这种情况下交替使用firstlast,但返回类型将是function definition 的URL?,可能需要您打开包装。另一方面,使用下标访问器返回一个非空的URLby definition,只要该索引处有一个元素(否则您将遇到超出范围的运行时错误)。【参考方案2】:

您可以通过NSSearchPathForDirectoriesInDomainsfoundation function获取文档路径,如下:

NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [searchPaths objectAtIndex:0];

这适用于 iOS 2+。

【讨论】:

@Andreas 没问题。希望一切顺利。 :-) 如何将其作为 NSURL 而不是字符串? 从documentsPath到NSURL:[NSURL fileURLWithPath:urlString];确保你的字符串以/结尾,如果url指定了一个目录。【参考方案3】:

斯威夫特 3

let documentsUrl = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask).first!

【讨论】:

【参考方案4】:

这里是 Swift 2.2 版本:

let paths = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
let filePath = paths[0].URLByAppendingPathComponent("filename")

【讨论】:

以上是关于如何获取应用程序文档目录 iPhone 的 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHAsset 获取图像 URL?是不是可以使用 PHAsset URL 将图像保存到文档目录?

如何获取我的 iphone 应用程序的注册文件的 url?

无法从 iPhone 文档目录位置中的已保存文件重新加载 UIImage

如何从 iPhone 的文档目录中删除超过两天的文件

如何从 iPhone 照片库中删除照片

如何仅获取保存在iphone应用程序文档文件夹中的所有照片名称