我喜欢在开发和使用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模拟器的每次启动时,Path都是不同的,因为IOS模拟器的每个实例在路径中都有自己的DeviceID。
我想遵循这些指导方针,但不希望有不同的方法。 我的用例:我的应用程序从URL下载一个大文件。如果文件下载一次,我喜欢在每次下次启动后使用文件而不再下载整个文件。但在我的实际开发环境中,我的应用程序总是会再次下载该文件。
任何帮助?
答案 0 :(得分: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)")
}