0

インストールされたアプリケーションでのみ発生するクラッシュがあります IDE で cvrash を作成できません (Flash Builder のデバッグまたは実行オプション)

長い間コードにコメントを付けたりコメントを外したりした後、問題が見つかり、以下のコードを投稿しています

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       xmlns:ns="generic_components.*"
                       creationComplete="windowedapplication1_creationCompleteHandler(event)">
    <fx:Script>
        <![CDATA[
            //import core.Logger;

            import mx.controls.Alert;
            import mx.events.FlexEvent;

            import spark.events.TextOperationEvent;

            protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
            {
                //Logger.init();
            }
            public static function humanFromCamelCase(txt:String):String{

                var res:String=txt.charAt(0);
                //Logger.write("camel case for "+txt);
                for (var i:int=1;i<txt.length;i++) 
                {
                    //  Logger.write("camel iter "+i);
                    var c:String=txt.charAt(i);
                    //Logger.write("camel char is "+c);
                    if(c==c.toUpperCase())
                    {
                        res=res+" "+c;  
                    }
                    else
                        res=res+c;
                }

                return res;
            }


            protected function test_clickHandler(event:Event):void
            {
                Alert.show(humanFromCamelCase("CompanyId"));

            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:layout>
        <s:VerticalLayout />
    </s:layout>
    <s:Button id="test" label="TEST" click="test_clickHandler(event)"/>

</s:WindowedApplication>

こちらの Web サンプルも参照してくださいhttp://ploscariu.com/crash/TestWeb.html (将来的には存在しない可能性があります)

このクラッシュの奇妙な点: 1 何が起こるかわかりません

2 プレーヤーの通常のクラッシュ ハンドラが表示されない

3 は開発環境の IDE でクラッシュしません

4 これらの Logger.write のコメントを外すと、コードは自分のマシンで正常に動作し (すべてのマシンで動作するわけではありません)、Logger.write は文字列をファイルに書き込み、別のプロジェクト swf に配置されます (ロガーは含まれていません)コード) 私は、 Logger.write への呼び出しが遅延または同様の何かを引き起こす可能性があると仮定します

私のコードに何か問題があるのでしょうか、それともプレーヤーにバグがありますか? またはコンパイラ?? 何か案は?

編集: -サンプルコードやページのように使用していないときにエラーが発生するため、使用するロガーではありません。アプリがクラッシュするロガーはありません

-i Flash からクラッシュ レポートのダイアログが表示されない

4

2 に答える 2

2

これは信じられないほど奇妙です!!!! なぜこれが起こっているのか(まだ)わかりません...しかし、回避策があります:

の代わりにres=res+c、次を使用しますres+=c

public static function humanFromCamelCase(txt:String):String{

    var res:String=txt.charAt(0);
    for (var i:int=1;i<txt.length;i++) 
    {
        var c:String=txt.charAt(i);
        if(c === c.toUpperCase())
        {
            res += " " + c;  
        }
        else
            res += c;
    }

    return res;
}
于 2012-05-22T14:01:49.870 に答える
1

エラーが発生する理由はわかりませんが、代わりに関数を次のように置き換えます。

public static function humanFromCamelCase(txt:String):String{
    return txt.replace(/([A-Z])/g, ' $1').replace(/^ /, "");
}

テストしていませんが、アイデアはわかります。これは、はるかに単純で高速なアプローチです。

私は別の方法も考えました:

public static function humanFromCamelCase(txt:String):String{
    return txt.split(/(?=[A-Z])/).join(' ');
}
于 2012-05-22T16:04:13.303 に答える