我想在我的应用程序中,允许用户保存大图像(jpg)以及每个图像(txt)的数据并加载图像/数据。我无法确定保存这些图像和文本文件的位置。由于图像文件的大小,Userdefault不起作用,我不想保存在文档目录中,因为用户可以访问并可能损坏数据。在IOS中保存和加载大文件的位置
哪里是我的应用程序保存大型数据文件的好地方,以便以后可以加载它们?
我想在我的应用程序中,允许用户保存大图像(jpg)以及每个图像(txt)的数据并加载图像/数据。我无法确定保存这些图像和文本文件的位置。由于图像文件的大小,Userdefault不起作用,我不想保存在文档目录中,因为用户可以访问并可能损坏数据。在IOS中保存和加载大文件的位置
哪里是我的应用程序保存大型数据文件的好地方,以便以后可以加载它们?
您可以在应用程序目录文件夹中保存和检索您的文件。你也可以使用iCloud来保存你的文件。
如果您想要从目录文件夹中保存和检索文件,请使用下面的代码。
Xcode 8.3.2 Swift 3.x。使用从文件的NSKeyedArchiver和NSKeyedUnarchiver
阅读文件
let documentsDirectoryPathString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let documentsDirectoryPath = NSURL(string: documentsDirectoryPathString)!
let jsonFilePath = documentsDirectoryPath.appendingPathComponent("Filename.json")
let fileManager = FileManager.default
var isDirectory: ObjCBool = false
if fileManager.fileExists(atPath: (jsonFilePath?.absoluteString)!, isDirectory: &isDirectory) {
let finalDataDict = NSKeyedUnarchiver.unarchiveObject(withFile: (jsonFilePath?.absoluteString)!) as! [String: Any]
}
else{
print("File does not exists")
}
文件写入文件
NSKeyedArchiver.archiveRootObject(finalDataDict, toFile:(jsonFilePath?.absoluteString)!)
如果由于某种原因你不想使用该文件的目录,或您希望将这些数据放在单独的文件夹中,或者您不想永久保存它们,也可以创建自己的临时目录
数据保存为文件在新目录中(SWIFT 3):
func saveToMyDirectory(data: Data, filename: String) {
var tempDirectoryURL = NSURL.fileURL(withPath: NSTemporaryDirectory(), isDirectory: true)
tempDirectoryURL = tempDirectoryURL.appendingPathComponent(filename)
do {
try data?.write(to: tempDirectoryURL)
} catch {}
}
替代做法:使用苹果的UIDocumentInteractionController或UIActivityViewController并让用户选择如何保存他/她的文件:
https://developer.apple.com/documentation/uikit/uidocumentinteractioncontroller
https://developer.apple.com/documentation/uikit/uiactivityviewcontroller
用于存储图像使用的核心数据。 –
我不希望用户访问保存的数据,所以我不能把“应用程序支持iTunes文件共享”放在我的info.plist中? – bakalolo
@bakalolo你最终解决了你的问题吗? –