Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用数据库时在后台任务中更新SQLite DB的最佳策略_Iphone_Sqlite_Background Process - Fatal编程技术网

Iphone 使用数据库时在后台任务中更新SQLite DB的最佳策略

Iphone 使用数据库时在后台任务中更新SQLite DB的最佳策略,iphone,sqlite,background-process,Iphone,Sqlite,Background Process,我有一个允许用户查询sqlite数据库的应用程序。当应用程序启动时,它会下载一个URL,以查看后台线程上是否有任何数据库更新 不幸的是,如果用户选择在更新运行时尝试查询数据库的函数,则会导致锁定 我的问题有两方面 在这种情况下,避免冲突的最佳策略是什么 将数据库复制到另一个文件更新并复制回 使用某种单例操作,并使用它来调度队列中的操作 循环并等待锁打开(尽管我不想阻止用户) 是否可以在应用程序终止之前暂停后台线程,并在应用程序终止之前运行更新 如果有人有任何建议,我将不胜感激,因为我被要求在

我有一个允许用户查询sqlite数据库的应用程序。当应用程序启动时,它会下载一个URL,以查看后台线程上是否有任何数据库更新

不幸的是,如果用户选择在更新运行时尝试查询数据库的函数,则会导致锁定

我的问题有两方面

  • 在这种情况下,避免冲突的最佳策略是什么

    • 将数据库复制到另一个文件更新并复制回
    • 使用某种单例操作,并使用它来调度队列中的操作
    • 循环并等待锁打开(尽管我不想阻止用户)
  • 是否可以在应用程序终止之前暂停后台线程,并在应用程序终止之前运行更新


  • 如果有人有任何建议,我将不胜感激,因为我被要求在用户无需停止使用应用程序的情况下运行更新。

    要回答您的问题,我相信#1点3是解决Iphone上特定问题的最佳解决方案。鉴于您无法启动另一个线程来进行后台处理,因此进行一个小的等待(大多数程序在开始时都有)是一个标准操作

    我不会尝试实现在应用程序终止时推送更新的方法。很多时候,人们(包括我在内)只是想继续做其他事情,却停止了运行应用程序


    依我看,在程序启动时等待(希望不要太长)是解决这个问题的最佳方法。

    请澄清-听起来数据库查询应该是一个非常短、快速的功能,尽管URL下载可能需要更长的时间。在整个URL下载操作期间,您是否持有数据库锁?如果是这样的话,我认为您希望将URL下载作为一项操作来完成,并且在收到所有数据后,快速将其应用到您的数据库中,从而在URL下载过程中不会保留数据库。

    数据库查询很短。URL下载再次在后台进行。没问题。在URL下载完成之前,我不会打开数据库。当我试图处理URL并创建SQL语句来更新数据库时,就会出现问题。更新的速度也不一定是问题所在,只是用户可以在同一个实例中执行一个函数,在处理更新时从数据库请求数据。我想我只是在试图理解最好的解决方案,因为文件锁定的限制。我完全清楚:更新过程也发生在后台线程上。是的,开始时的等待是作为一个后台线程,UI可以自由使用,因此不会发生这种情况。另一个选择是,我可以暂时将用户锁定,并告诉他们数据库正在更新,但我被要求不要这样做需要多长时间?对于一个没有描述的图标(沙漏,旋转的圆圈,小动物在一个圆圈里)来说,几秒钟的时间永远不会被视为强迫等待。。。在当今世界,每个人都非常习惯这种解决方案:)你可以实现一个图标,启动一个计时器,在后台线程完成时发送事件。是的,我正在考虑使用UIAlertView/progressView,我已经有了一个全屏覆盖视图,显示消息和UIActivityView,但可能在查询或更新开始的那一刻正在使用。我已经上路了,还在处理它最近。。。。