如何使SenchaTouch在从iOS本机插件调用时更新UI?

如何使SenchaTouch在从iOS本机插件调用时更新UI?,ios,cordova,sencha-touch,Ios,Cordova,Sencha Touch,我们有一个Phonegap/Cordova(1.6.0)应用程序,它的UI使用SenchaTouch(1),还有一个自定义本机(iOS)插件,用于解压缩Documents文件夹中的文件。该插件没有自己的GUI 我们希望通过更新Sencha应用程序中的进度条(或简单的对话框)来显示解压操作的进度。我们在本机插件中实现了一个更新函数,它使用“writeJavascript”方法从本机代码调用Javascript代码 调用该功能是可行的,但是我们在Sencha UI中进行的GUI更新实际上都没有显示,

我们有一个Phonegap/Cordova(1.6.0)应用程序,它的UI使用SenchaTouch(1),还有一个自定义本机(iOS)插件,用于解压缩Documents文件夹中的文件。该插件没有自己的GUI

我们希望通过更新Sencha应用程序中的进度条(或简单的对话框)来显示解压操作的进度。我们在本机插件中实现了一个更新函数,它使用“writeJavascript”方法从本机代码调用Javascript代码

调用该功能是可行的,但是我们在Sencha UI中进行的GUI更新实际上都没有显示,调试日志语句也没有显示。只有在代码之间添加一个Javascript警报框,我们才能观察到Sencha更新已被处理,并且UI中发生了一些变化。感觉就像Sencha以异步方式做所有事情,而代码以某种方式被阻塞


我们缺少什么?

这是一个长时间运行的操作阻塞UI线程的经典示例。我想在软件开发中事情永远不会改变

基本问题是,如果从HTML应用程序调用Phonegap插件,Phonegap应用程序的图形线程(只有一个线程)将被阻止。解决方案很简单:尽快从插件返回

对于长时间运行的操作,这意味着在单独的线程中启动它们。iOS上的一个非常优雅的机制是使用Grand Central Dispatch,如所示

dispatch\u async(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u DEFAULT,0))中执行长时间运行的操作阻塞,然后将更新发送回嵌套的
调度异步(调度获取主队列(),^{})中的Phonegap UIwriteJavascript
编码>块