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 に答える