Titanium"在与调用函数不同的上下文中创建[object TiMediaSound]。"

时间:2016-03-06 23:45:35

标签: appcelerator appcelerator-titanium

当我在回调计时器中调用声音对象时,我的代码中出现错误。在抛出错误之前,wav文件将只播放一次。如果我将它包装在超时函数中,它将每次都有效。我应该以不同的方式编码摆脱这个错误吗?

function InitInterval() {
timer.stop();
timer.setInterval({
    callback : IntervalMain,
    delay : 1000 //set delay in ms
});
timer.start();
};

function IntervalMain() {
has_started = true;

if (countdown === 0) {
    schedule_index++;

    setTimeout(function() {
        PlayAudio(schedule[schedule_index].sound, schedule[schedule_index].type);
    }, 500);
}

$.crono_label.text = time_converter.toTime(countdown--);

};

1 个答案:

答案 0 :(得分:2)

setTimeout(function_name , 0);是在主线程上运行它的最佳方式。

对于某些插件,有时我们无法访问UI对象,并且因为它们不在主线程上运行而与上下文有相同的问题。

在我的情况下,我在Touch ID功能中遇到了这个问题,我为IOS 8使用了 Ti.TouchId 模块 authenticate 功能。< / p>

我无法运行 Alloy.createController("window_Name").getView(); 和 收到的错误是Creating [object WindowName] in a different context than the calling function.

目前我认为Titanium不能仅在插件中修复此问题。

我使用 setTimeout(function_name , 0); ,它对我来说很好。