我正在开发一个 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 对话框取消按钮的行为,即向下传播到我的对话框中,不能被认为是正常或合理的。