0

我正在开发一个 iOS 应用程序,用户在线获取一个合理大小的数据库,然后离线使用它。由于设备上的内存限制以及我处理事务插入的方式,更新和同步大约需要 10-15 分钟。一直以来,我打开了一个对话框视图,通知用户进度,并让他选择取消和恢复对数据库的更改。

无论如何,今天在测试时我注意到 iTunes 应用程序试图作为服务器联系并做一些后台工作,但抛出了一个错误:

 itunesstored[68] <Warning>: Could not load download manifest with underlying error: 
                             Error Domain=NSURLErrorDomain Code=-1001 "Cannot connect
                             to 112.168.198.2" UserInfo=0x1f8d6150 
                             {NSLocalizedDescription=Cannot connect to 112.168.198.2}

这导致在我已经显示的对话框之上显示一个对话框,通知用户 iTunes 无法连接。

现在,当我单击“关闭”按钮时,它也以某种方式关闭了我的对话框,仅导致在用户决定停止更新时执行部分操作。异步更新继续在后台进行,而数据库试图恢复导致数据库锁定的更改,我需要终止进程并重新启动应用程序并更新。按照设计,如果发生这种可怕的事情,一切都会恢复。

现在我注意到我应该对我的代码进行一些更改,以使数据库更难像那样锁定,我正在努力解决这个问题。但我想知道的是:是否可以禁止 iTunes 或任何其他进程在您的应用程序中发生某个关键进程时在 UI 线程上执行任何工作?

iTunes 对话框取消按钮的行为,即向下传播到我的对话框中,不能被认为是正常或合理的。

4

1 回答 1

0

不,这是不可能的。应用程序的编码方式应考虑到此类中断。例如,在 iPhone 上,如果有电话打进来怎么办?处理它是应用程序的责任;无论您的“关键过程”如何,系统都会让呼叫通过。

一般来说,听起来您的应用程序设计的不是最好的。例如,解析一个数据库需要 10 分钟似乎非常长——这个数据库有多少条记录?您应该能够在几秒钟内在 iPhone 上导入包含 100,000 条记录的数据库。

于 2013-01-22T12:57:24.743 回答