在我的iOS应用中,我想存储一些用户特定的数据。
我希望NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
返回用户的Documents目录,而是返回以下目录:/var/mobile/Containers/Data/Application/%app_id%/Documents
当我在iOS设备上使用其他用户(Apple-ID)登录时,此路径保持完全相同。
似乎此目录仅在Mac OS中是用户特定的。
那么我应该使用哪个目录在iOS中存储用户特定数据?
更新
根据之前的答案和评论,似乎没有预期的行为。
答案 0 :(得分:2)
您应该放置应用程序文件的位置
将用户数据放入 Documents / 。用户数据通常包括您可能希望向用户公开的任何文件 - 您可能希望用户创建,导入,删除或编辑的任何文件。对于绘图应用程序,用户数据包括用户可能创建的任何图形文件。对于文本编辑器,它包含文本文件。视频和音频应用甚至可能包含用户下载后观看或收听的文件。
将应用创建的支持文件放在库/应用支持/ 目录中。通常,此目录包含应用程序用于运行但应保持对用户隐藏的文件。此目录还可以包括从应用程序包加载的数据文件,配置文件,模板和已修改的资源版本。
请记住,默认情况下会备份 Documents / 和Application Support /中的文件。您可以使用NSURLIsExcludedFromBackupKey键调用 - [NSURL setResourceValue:forKey:error:]从备份中排除文件。必须从备份中排除任何可以重新创建或下载的文件。这对于大型媒体文件尤为重要。如果您的应用程序下载视频或音频文件,请确保它们不包含在备份中。
将临时数据放在 tmp / 目录中。临时数据包括您不需要长时间保留的任何数据。请记住在完成这些文件后删除这些文件,以免他们继续占用用户设备上的空间。当您的应用未运行时,系统会定期清除这些文件;因此,在您的应用终止后,您不能依赖这些文件。
将数据缓存文件放在 Library / Caches / 目录中。缓存数据可用于需要比临时数据持续更长时间的任何数据,但不能与支持文件一样长。一般来说,应用程序不需要缓存数据正常运行,但它可以使用缓存数据来提高性能。高速缓存数据的示例包括(但不限于)数据库高速缓存文件和瞬态可下载内容。请注意,系统可能会删除Caches /目录以释放磁盘空间,因此您的应用必须能够根据需要重新创建或下载这些文件。
答案 1 :(得分:0)
您可以为您的应用创建新文件夹,在文档内目录尝试以下代码创建文件夹。当你想要app上的数据时,不要忘记从同一目录中读取。
当您不想提供对其他用户的访问权限时,您必须在注销时删除该文件夹,或者必须使用名称 userId 创建文件夹或其他一些唯一键。我建议在注销时删除该特定文件夹。
let yourPathToDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String + "/" + "YourAppDirDir" + "/"
if !fileManager.fileExists(atPath: yourPathToDirectory!) {
do {
try FileManager.default.createDirectory(atPath: yourPathToDirectory!, withIntermediateDirectories: true, attributes: nil)
} catch {
print("error found")
}
}