1

我正在开发一个在 iPhone 中显示联系人的 Titanium 应用程序。当用户选择用户的电子邮件属性时,我将显示电子邮件编辑器窗口。

但是我的应用程序崩溃并且控制台显示:

** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from <ABPeoplePickerNavigationController: 0xb1b7940> to <MFMailComposeViewController: 0x1508c880> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed'
*** First throw call stack:
(0x33fb012 0x2e4de7e 0x33fae78 0x923f35 0xf55d05 0xd544f3 0x33ef1bd 0x33ef0d6 0xd481c5 0xd53342 0x1fb1402 0x1fb1dbd 0x1fb1c30 0x11af4e9 0x370b53f 0x371d014 0x370d7d5 0x33a1af5 0x33a0f44 0x33a0e1b 0x31137e3 0x3113668 0xc6a65c 0x33c8 0x27d5)

我正在使用以下代码:

var values = {cancel:function(){}};
values.fields = ['firstName','email'];

function showContacts()
{
        Titanium.Contacts.showContacts(values);
};

values.selectedProperty = function(e) {
                if(e.property == 'email')
                {
                    var emailDialog = Titanium.UI.createEmailDialog();
                    emailDialog.subject = "Hello from Titanium";
                    emailDialog.toRecipients = [e.value];
                    emailDialog.messageBody = 'Appcelerator Titanium Rocks!';
                    if(emailDialog.isSupported())
                    {
                        emailDialog.open();
                    }
                }
            }

我知道这个错误是因为我试图在联系人窗口被关闭时显示电子邮件编辑器。

关闭联系人窗口后如何显示电子邮件编辑器?

请帮我。提前致谢。

4

2 回答 2

2

将代码包装在 setTimeout 中......我在处理动画时经常使用它。

values.selectedProperty = function(e){
    setTimeout(function() {
        // DO SOMETHING...
    }, 200);
};
于 2012-12-29T15:35:26.270 回答
0

最后我找到了解决方案。

我写了一个睡眠函数,并在回调函数中调用它。它解决了我的问题并且没有发生崩溃......万岁!

function sleepMyThread(milliseconds)
{
    var startTime = new Date().getTime();

    while((new Date().getTime() - startTime) < milliseconds)
    {
    }
}

并添加了 sleep 方法作为回调函数的第一条语句。

 values.selectedProperty = function(e){
       sleepMyThread(777);
      //other stuffs
}
于 2012-12-29T09:50:09.337 回答