【问题标题】:Storing Files during development from IOS App从 IOS App 开发过程中存储文件
【发布时间】:2015-02-13 09:21:18
【问题描述】:

在开发和使用 IOS 模拟器期间,我喜欢编写一个静态数据库,该数据库从 url 获取到我的 IOS 应用程序的本地磁盘。

Apple 的指南建议为此使用 Caches 目录:

Data that can be downloaded again or regenerated should be stored in the <Application_Home>/Library/Caches directory. 

为此我使用了以下代码(在我的示例中它是一个简单的文本文件)

let dirs : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String]
        if ((dirs) != nil) {
            let dir = dirs![0]; //documents directory
            let path = dir.stringByAppendingPathComponent("testfile.txt");
            let text = "some text"

            println("Pfad : " + path);

            //writing
            text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil);

            //reading
            let text2 = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)
        }

如您所见,我使用 NSSearchPathDirectory.CachesDirectory 作为建议的指南。

然后文件存放在:

/Users/user/Library/Developer/CoreSimulator/Devices/19E2CB7E-3ABB-4C0A-8B49-39A0BE392A93/data/Containers/Data/Application/F7455C1D-FEF2-49A1-8F21-4A3B19D59CAB/Library/Caches/testfile.txt

现在我意识到,每次启动新的 IOS 模拟器时,路径都是不同的,因为 IOS 模拟器的每个实例在路径中都有自己的 DeviceID。

我想遵循指南,但不想有不同的路径。 我的用例:我的应用从 URL 下载一个大文件。如果文件下载一次,我喜欢在每次下一次启动后使用该文件,而无需再次下载整个文件。但在我的实际开发环境中,我的应用程序总是会再次下载该文件。

有什么帮助吗?

【问题讨论】:

  • 使用您保存的路径加载存储的文件,它将起作用。
  • 我不确定我是否理解正确。您要我将路径静态设置为我首先保存的路径吗?
  • 不!从此路径读取: let dir = dirs![0]; //文档目录 let path = dir.stringByAppendingPathComponent("testfile.txt");
  • 我不明白。我一开始就这样做了,但后来我意识到 textfile.txt 的路径不存在,因为与此同时 dirs![0] 是不同的。 IOS 模拟器的每一次新启动都会提供一个新的目录![0] 返回。

标签: ios ios-simulator storing-data


【解决方案1】:

这是文件的缓存路径:

func cachePathForFile(fileName: String)->NSURL? {
    let fileManager = NSFileManager.defaultManager()
    var error:NSError?
    var documentsDir = fileManager.URLForDirectory(NSSearchPathDirectory.CachesDirectory, inDomain: NSSearchPathDomainMask.UserDomainMask, appropriateForURL: nil, create: true, error: &error)
    var fileUrl = documentsDir?.URLByAppendingPathComponent(fileName)
    return fileUrl
}

读写:

// get path
    var fileUrl = self.cachePathForFile("test.txt")
    var text = "text"
    var error: NSError?

    // write
    if fileUrl != nil {
        text.writeToURL(fileUrl!, atomically: true, encoding: NSUTF8StringEncoding, error: &error)
    }

    // read
    if fileUrl != nil {
        var fileText = String(contentsOfURL: fileUrl!, encoding: NSUTF8StringEncoding, error: &error)
        println("\(fileText)")
    }

【讨论】:

  • 感谢 iOSfleer。我知道这个。但这仅对一个会话有效。 IOS 模拟器的第一次启动将工作完美的写作和阅读。但是第二次启动创建了一个新的存储位置,我无法读取以前存储的数据。当然,缓存应该是这样的。所以我想我误解了指导方针。那么我应该在磁盘上为我的应用程序在哪里存储数据,这些数据应该是持久的?
  • 第二次启动时,路径不同,但App可以找到并读取存储的文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 2015-05-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多