2011-04-09 78 views
34

此代码是Core Data的一部分。 URLsForDirectory ....方法不能在iOS < 4上运行,所以我需要知道一些其他要调用的方法/对象。我也会提供文件供将来参考。谢谢如何获取应用程序文档目录的URL iPhone

/** 
Returns the URL to the application's Documents directory. 
*/ 
- (NSURL *)applicationDocumentsDirectory 
{ 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 
+0

你需要一个URL,或者只是文件的路径? – 2011-04-09 21:40:48

回答

37

您可以通过NSSearchPathForDirectoriesInDomainsfoundation function获得文件的路径如下:

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

这将在iOS工作2+。

+0

@Andreas没问题。希望一切顺利。 :-) – 2011-04-09 21:47:43

+8

你怎么能得到这个NSURL而不是一个字符串? – zakdances 2012-07-05 18:16:14

+8

从documentsPath到NSURL:'[NSURL fileURLWithPath:urlString];'确保你的字符串以'/'结尾,如果url指定一个目录。 – wbarksdale 2012-10-04 17:15:42

42

另一种解决办法是使用-[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+中

+0

你为什么要访问ObjC中的'lastObject'和Swift中的'[0]'aka'firstObject'?只是要求兴趣... – 2015-07-31 18:13:45

+0

'paths.first'将返回一个可选项。为了简单起见,下标访问器在这里使用,所以我们不必处理类型套管和可选的解包。 – 2015-07-31 21:59:41

+0

' - [NSArray firstObject]'和' - [NSArray lastObject]'定义相同。实施并没有说任何差异。你能提供更多背景吗? – 2015-08-05 13:26:55

6

这里是Swift 2.2版本:

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

斯威夫特3

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