- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的应用程序使用 iTunes 文件共享,它会将 Documents 目录中的所有内容暴露给用户,使其容易被意外删除或操纵。
我花了几个小时阅读这些文档,但内容一团糟,我希望有人从经验中知道。首先,他们在一个地方说我应该将这些文件放在 Library 目录中。
In this technical Q & A苹果说这是保留的。根据我的理解,这意味着我可以安全地将重要的用户数据(如 sqlite3 数据库文件)放在该目录中。当用户更新到新版本时,该目录下的内容会被保留,更新后仍然可用:
applications can create their own directories in /Library/ and those directories will be preserved in backups and across updates
因此/Library/保留在备份和更新中。
对于英语不好的我来说,这意味着:是的,数据会保留下来。用户备份时不会丢失。用户更新时不会丢失。我在几本词典中查找了“保存”一词,我确信它的意思是“它会存活下来”。
但是,有 this note in the iOS Application Programming Guide这说明了完全不同的事情!在这里,他们谈到了图书馆目录:
<Application_Home>/Library/
You should not use this directory for user data files.
The contents of this directory (with the exception of the Caches
subdirectory) are backed up by iTunes.
Your application is generally
responsible for adding and removing
these files. It should also be able to
re-create these files as needed
because iTunes removes them during a
full restoration of the device.
“不应用于用户数据文件。” (???)
但与此同时,他们承认它由 iTunes 支持。好的。那为什么我不应该把用户数据文件放在那里呢?
/Library/Caches Use this directory to write any application-specific support files that you want to persist between launches of the application or during application updates. (...) It should also be able to re-create these files as needed because iTunes removes them during a full restoration of the device.
什么?!我应该将这些文件放在 Library/Caches 中。但是这个目录没有被 iTunes 备份,正如他们上面所说的。所以这只是为了更新而保存,而不是为了备份。并且数据可能随时被系统删除。
现在这让我很困惑。据我了解,我可以在邪恶与魔鬼之间做出选择:/Library/中的数据无法在更新后保留下来,但由 iTunes 备份。/Library/Caches 中的数据在更新后仍然存在,但没有被 iTunes 备份,并且它可能随时被系统删除(因为它是一个“缓存”)。
另一方面,技术问答建议将这些重要的用户数据放在/Library/中的自定义子文件夹中,例如/Library/PrivateDocuments。
与iOS应用程序编程指南相比,技术问答说:整个/Library目录在更新和备份期间始终被保留
所以现在,真的,两个文档中的一个一定是错误的。但是哪一个?真相是什么?请不要猜测!我正在从经验中寻找答案,我觉得除了发布应用程序和祈祷之外没有办法解决这个问题。也许有人想分享他/她真正有效的经验。
最佳答案
我见过 Library/Preferences(存储 NSUserDefaults 的地方)在恢复过程中被保留,所以我认为大部分 Library 都被保留了下来。不过,缓存目录可能被排除在外。
一般来说,只需使用 API 获取路径并相信 iTunes 会保留它们,除非它们旨在表示临时文件夹。这意味着您应该使用为您的应用程序命名的 NSApplicationSupportDirectory 的子目录:
NSArray * urls = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask];
NSAssert([urls count], @"Can't get app support directory");
NSURL * url = [urls objectAtIndex:0];
url = [url URLByAppendingPathComponent:@"MyAppName"];
在实践中,这最终将成为您沙箱中的“Library/Application Support/MyAppName”,但无论如何您都应该使用该 API 以确保它不会过时。
(如果您关心对 iOS 3 或 2 的支持,请使用 NSSearchPathForDirectoriesInDomains()
函数而不是 -URLsForDirectory:inDomains:
方法。)
关于iphone - 当 Documents 目录不是一个选项时,在哪里存储私有(private)重要用户数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6114628/
我正在尝试计算 iFrame 的高度,但不明白为什么 document.body.offsetHeight + document.body.bottomMargin 不等于 document.docu
我正在使用 Node/Mongoose/MongoDB 并尝试构建一个轮询应用程序。一个关键需求是跟踪单个用户对同一民意调查的响应如何随时间变化(他们一遍又一遍地进行同一民意调查)。 我有一个用户模型
首先,我不是普通的博主,我很困惑。如果我的问题不符合要求,请指导我。我会努力改进的。 我已提交 Microsoft Code Review 的 Microsoft CRM 插件。我是 JavaScri
谁能解释为什么使用类似的东西: gci -force "\\computername\c$\users\username\Documents" -recurse 或者 gci -force "\\co
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, over
这个问题已经有答案了: What is the (function() { } )() construct in JavaScript? (28 个回答) 已关闭 6 年前。 说实话,一开始我以为我可
document.getElementsByTagName("*") 适用于 IE/Firefox/Opera,但不适用于 Chrome 和 Safari。 document.all 适用于 IE/C
这个问题在这里已经有了答案: What is the difference between Document and document in JavaScript? (2 个答案) 关闭 8 年前。
我以某种方式发现将事件监听器添加到文档的行为有点奇怪。虽然向 HTMLElements 添加监听器工作正常,但向文档添加监听器不起作用。但奇怪的是,使用 jQuery 可以让它工作。 那么有人可以解释
谁能告诉我这两个 JavaScript 命令之间的区别? 这两个跨主要浏览器的兼容性是什么?我知道 documentElement 与大多数浏览器兼容。 谢谢 最佳答案 document.docume
什么时候应该使用 document.all 与 document.getElementById? 最佳答案 document.all 是 Microsoft 对 W3C 标准的专有扩展。 getEle
当升级到 react-native 0.61.2 时,这个问题出现了。我做到了从手机中删除了 apk 和自动链接使用 react-native link 然后 react-native run-and
当升级到 react-native 0.61.2 时,这个问题出现了。我做到了从手机中删除了 apk 和自动链接使用 react-native link 然后 react-native run-and
我将收到 tungstenite::Message ,它将包含来自客户端的bson文档。我可以将tungstenite::Message转换为Vec,但是如何在服务器端将其转换回 bson::docu
我这里有一个简单的疑问: 文档对象范围位于浏览器选项卡内:我的意思是如果我设置document.tab1 ='tab1' 在一个浏览器选项卡中 它在其他选项卡中不可用。 但是 document.coo
我经常使用并看到推荐的 dom 访问结构,例如这样动态地将内容添加到页面: loader = document.createElement('script'); loader.src = "myurl
我对 JQuery 还很陌生。我正在使用this JQuery 函数在元素上显示工具提示。 我根据我的需要(在这个社区的帮助下)以这种方式编辑了代码: $(document).ready(functi
我想知道哪个是运行js代码的正确方法,该代码根据窗口高度计算垂直菜单的高度并按时设置,不晚不早。 我正在使用 document.ready 但它并没有真正帮助我解决这个问题,它有时没有设置,我必须重新
我正在浏览一个 js 文件并发现这个声明var dataobj=document.all? document.all.id_name : document.getElementById("id_nam
想知道何时使用,这适用于什么浏览器? if (document.all&&document.getElementById) { // Some code block } 最佳答案 我认为没有任何重要的
我是一名优秀的程序员,十分优秀!