【问题标题】:Swift - Storing data in directory using NSSearchPathForDirectoriesInDomains, but directory always changes?Swift - 使用 NSSearchPathForDirectoriesInDomains 将数据存储在目录中,但目录总是更改?
【发布时间】:2015-05-09 11:51:29
【问题描述】:

我有一个录音机应用程序,其中记录的声音存储如下:

let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0] as String  
    var pathArray = [dirPath, recordingName]
    let filePath = NSURL.fileURLWithPathComponents(pathArray)

所有文件路径 URL 都存储在一个数组中(放入 NSUserDefaults)以便于访问。

如果文件在与录制时相同的运行中播放,我可以播放文件,但是打开和关闭模拟器备份会导致文件路径错误(因为 ~/ 的 app-id 文件夹Library/Developer/CoreSimulator/Devices/Device-ID/data/Container/Data/Application/app-id-folder/Documents/filename.wav 将更改名称)。每次运行应用程序时,如何更改包含文件 URL 的数组以更新 app-id 文件夹名称? (目前它只是一个字符串数组,必要时转换为 NSURL 类型)。或者更简单,是否可以保存到用户主目录或您不需要处理更改文件夹名称的地方?

【问题讨论】:

  • 为什么不直接列出文档文件夹文件?
  • 您不应将完整路径存储在NSUserDefaults 中。只需将相对目录存储在文档文件夹中,然后在运行时将该相对路径附加到NSSearchPathForDirectoriesInDomains-派生路径。

标签: swift nsdocumentdirectory


【解决方案1】:

我通过创建一个仅包含文件名的 NSUserDefaults 数组(如 [audio1.wav,audio2.wav])并在每个新的 viewdidload 上调用 NSSearchPathForDirectoriesInDomains 来解决它,然后将两者组合成一个新字符串。像这样(下面的代码会调用数组中的第二个音频文件):

let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0] as String
var filesNamesWithWav = defaults?.objectForKey("filesNamesWithWav") as NSArray
var newpath = "\(dirPath)/" + "\(filesNamesWithWav[1])"

【讨论】:

猜你喜欢
  • 2011-08-23
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2020-07-20
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多