【问题标题】:Is it possible to block iTunes notifications while a process is running进程运行时是否可以阻止 iTunes 通知
【发布时间】:2013-01-22 11:46:17
【问题描述】:

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

【问题讨论】:

    标签: iphone ios objective-c ipad itunes


    【解决方案1】:

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

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

    【讨论】:

    • 就像我说的,这表明我的设计存在缺陷。但这并没有改变这样一个事实,即通过所有其他显示对话框的 iTunes 对话框触摸事件有点奇怪。在时间方面,数据以 JSON 格式提供给我,我需要对其进行解析。并且试图获得比我现在得到的更大的 JSON 字符串给了我一个内存异常。所以我需要更频繁地获取较小的版本。数据是包含图像数据的 64 位字符串。也许不是最好的方法,但在这种情况下,我的双手被束缚了。
    • 我不确定多个UIAlertView 的确切行为,但我认为如果与 iTunes 交互,您的警报应该仍然存在。在数据方面,当你说 64 位图像数据作为字符串时——你是指 base64 吗?
    • 是的,抱歉的意思是 base64。我无法重现这种情况,所以我看不到警报视图实际发生了什么。只需要尽可能地处理它。
    • 关于数据库的导入,可以导入字符串。然后,在以后解码图像本身,也许通过惰性实例化?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多