是否可以在进程运行时阻止iTunes通知

时间:2013-01-22 11:46:17

标签: iphone ios objective-c ipad itunes

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

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。应该以应对这些中断的方式对应用进行编码。例如,在iPhone上,如果有电话进来会怎么样?这是应用程序处理它的责任;无论你的“关键过程”如何,系统都会让电话通过。

一般来说,听起来您的应用并非以最佳方式设计。例如,解析数据库的10分钟似乎非常长 - 这个数据库有多少条记录?您应该能够在几秒钟内在iPhone上导入包含100,000条记录的数据库。