我有一个带有记录的SQlite数据库文件,它是我的应用程序附带的。我只是使用添加到项目中的文件来执行插入和更新语句。上传到我的测试设备后,我得到了一个异常,文件是只读的。经过一些研究,我发现我必须将db文件复制到用户目录中才能进行插入。目前,这是可行的。但我有一个关于它的观点问题,我没有通过谷歌得到答案:
我应该把我的复制过程放在哪里?我在AppDelegates FinishedLaunching中实现了它,在那里我检查它是否已经存在。
我应该把文件复制到哪里?我现在使用的是MyDocuments文件夹,这样可以吗?
由于该文件无法加密,其他应用程序能否访问该数据库文件?
当用户决定从设备中删除该应用程序时。数据库文件也会被删除吗?
谢谢!
发布于 2012-01-23 16:43:43
我应该把我的复制过程放在哪里?我在AppDelegates FinishedLaunching中实现了它,在那里我检查它是否已经存在。
这真的要看情况了,但从我的角度来看,finishedLaunching是可以的。
我应该把文件复制到哪里?我现在使用的是MyDocuments文件夹,这样可以吗?
我不知道你说的"MyDocuments“文件夹是什么意思。每个应用程序都有一个专用的文档目录。这就是你应该复制它的地方。
由于文件无法加密,其他应用程序可以访问数据库文件吗?
不,它们运行沙箱(除非设备被越狱)
当用户决定从设备中删除应用程序时执行
。数据库文件也会被删除吗?
是,因为整个文档目录将被删除。
发布于 2012-01-23 17:14:51
我应该把我的复制过程放在哪里?我在AppDelegates FinishedLaunching中实现了它
请记住,在FinishedLaunching
watchdog终止您的应用程序之前,完成iOS执行的时间是有限的(大约15秒)。
根据你的数据库的大小,设备的速度和你需要做的其他处理,那么你可能想要考虑只检查它是否已经存在(这应该是快速的),然后从复制(如果需要)到另一个线程。
我现在使用的是MyDocuments文件夹,这样可以吗?
是的,使用Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments)
是正确的。
@Lightforce回答中的其他所有内容都涵盖了剩下的内容。
https://stackoverflow.com/questions/8975163
复制相似问题