【问题标题】:What's the best way to find the user's Documents directory on an iPhone?在 iPhone 上查找用户的 Documents 目录的最佳方法是什么?
【发布时间】:2010-09-21 07:33:02
【问题描述】:

我正在阅读 Erica Sadun 的 iPhone Developer's Cookbook,遇到了一个问题。

她在书中说找到用户的Documents目录的方法是用代码:

[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

但这似乎有点脆弱,并且与正常的 Mac 方式不同,这将是:

NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);

有什么特别的理由需要使用其中的一个吗?

【问题讨论】:

  • 错字:NSDocumentsDirectory ==> NSDocumentDirectory

标签: ios objective-c iphone cocoa-touch


【解决方案1】:

对象:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)

斯威夫特:

var paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)

您需要返回数组的第一个元素。

【讨论】:

  • 酷,这就是我将使用的,但为什么它而不是其他方式?
  • 您可以使用其他方式,但是如果升级到操作系统更改了默认结构,则可以保证此答案仍然适用于新布局,而第一种方式将失败或开始重新创建旧目录。
【解决方案2】:

这是我在框架中使用的代码。

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

【讨论】:

  • 从 Xcode 5 开始,你应该使用[paths firstObject] 而不是[paths objectAtIndex:0]
  • 或“NSString *documentsDirectory = paths[0];”
  • paths.firstObject,因为它是property
【解决方案3】:

您应该考虑使用返回 URL 的 FileManager 方法,这是首选格式。

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

此方法旨在定位系统中已知的常见目录。

标识请求目录的 URL 对象数组。目录按照域掩码常量的顺序排列,用户域中的项目在前,系统域中的项目在后。

【讨论】:

  • 没错。我们的知识应该升级了,在 iOS 中我们应该使用 NSURL,而不是 NSString(用于路径)来表示本地文件。
【解决方案4】:

我用这个

NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *zipLocalPath = [documentPath stringByAppendingString:fileName];

【讨论】:

    【解决方案5】:

    在swift v3中,我使用了下面的sn -p

    var paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
    

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多