如何获取应用程序文档目录 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。在这种假设下,您可以在这种情况下交替使用first
或last
,但返回类型将是function definition 的URL?
,可能需要您打开包装。另一方面,使用下标访问器返回一个非空的URL
by definition,只要该索引处有一个元素(否则您将遇到超出范围的运行时错误)。【参考方案2】:
您可以通过NSSearchPathForDirectoriesInDomains
foundation 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 将图像保存到文档目录?