值将设置正确,但获得Null

时间:2012-12-03 21:53:15

标签: actionscript-3 get null set

因此,我已经成功地从XML文档中获取了一个值,并将其设置为一个名为“AddCommas”的单独类。跟踪功能向我展示了它设置正确。

有关详细信息,我的目标是使用语言指示符(法语为“fr”或英语为“en”),将其设置在相应的类中并放入我将使用的变量中。现在,我使用这个变量在if语句中使用;这将帮助我根据客户要求正确格式化数字(逗号,小数,空格)。

然而,我的问题是当我尝试获取值来使用它时。它总是以Null的形式回归。我已经在我的程序中放置了痕迹,试图确定何时发生这种情况,但我找不到它。这是代码......

从XML文件拉到集合中(这样可以正常工作,但我会为了你的利益而添加它,以防我错过了什么)

 public var commaHold = new AddCommas();
    localLanguage = xmlObj.localLanguage;
    trace("localLanguage + " + localLanguage);
    commaHold.setLanguage(localLanguage); // Set Language
   //More code follows...

这是set函数istelf ...

public function setLanguage(localLanguage:String){
langHold = localLanguage;
trace("Set Language =  " + langHold); //This always shows a successful set
}

现在我错误地认为在AS3中,一旦我的AddCommas类中的langHold被设置了,我应该能够使用它而不在我使用If语句的函数中调用get,对吧?比如这个?

var language = langHold;
if (language == "en"){
trace("Language is = " + language); // More code follows afterwards and as of now, this shows NULL

现在,我已尝试使用大量的Get函数将调用本身的语言变量添加到此函数中,并且它始终相同。我在这里错过了一些基本原理吗?

非常感谢你的时间。

2 个答案:

答案 0 :(得分:1)

如果您希望进行字符串比较,则需要使用引号,除非en是String变量,因为langHold是String,如:

if (language == "en"){

考虑修改set函数以使用as3关键字,如:

private var _language:String;

public function set language(value:String):void {
     _language = value;
     //do other stuff here if necessary, put a breakpoint on the line above
}

public function get language():String{
     return _language;
     //put a breakpoint on the line above
}

您应该能够看到类的任何实例何时更改了属性。我能想到的唯一另一个问题是它不是同一个类的实例,因此不会共享您之前设置的属性值。在调试器中,您可以检查它显示的“hashCode”或“address”,看它是否在到达断点时发生变化。

这是AS3中的Singleton结构示例(这一切都在一个文件中):

package com.shaunhusain.singletonExample
{

    public class SingletonExample
    {
        private static var instance:SingletonExample;

        public static function getIntance():SingletonExample
        {
            if( instance == null ) instance = new SingletonExample( new SingletonEnforcer() );
            return instance;
        }

        /**
         * 
         * @param se Blocks creation of new managers instead use static method getInstance
         */
        public function SingletonExample(se:SingletonEnforcer)
        {
        }
    }
}

internal class SingletonEnforcer {public function SingletonEnforcer(){}}

使用来自任何其他类的这个单独的共享实例看起来像这样:

private var singletonInstance:SingletonExample = SingletonExample.getInstance();

答案 1 :(得分:1)

ShaunHusain使用Singleton的理论是我需要的完美解决方案。但是,他的代码给了我一个奇怪的1061错误,我的格式和代码似乎没有错误。无论如何,我查找了另一种使用Singleton的方法,如下所示对我来说非常合适。老实说,肖恩的代码应该适用于任何人,我不知道为什么不是。我完全愿意承认这可能是我最后的一个错字,我只是没有看到。

我最终在Singletons类中嵌入了Set和Get,并将其用作中间人来保存我需要的信息。它运作得很好。

package chart {

    import chart.*;
    //

    public class StaticInstance  {

        private static var instance:StaticInstance;
        private static var allowInstantiation:Boolean;
        private var language:String;

        public static function getInstance():StaticInstance {
        if (instance == null) {
            allowInstantiation = true;
            instance = new StaticInstance();
            allowInstantiation = false;
            }
        return instance;
        }

        public function StaticInstance():void {
        if (!allowInstantiation) {
            throw new Error("Error: Instantiation failed: Use StaticInsance.getInstance() instead of new.");
            }
        }

        public function setLanguage(_language:String):void{
            language = _language;
            trace("language set = " + language);
        }
        public function getLanguage():String{
            return language;
        }
    }
}

这段代码允许我保存数据并从两个不同的类中再次调用它。这是一个非常黑客的工作,而不是仅仅能够将变量从函数传递给函数,但在我的情况下,我们没有创建此文件,我们正在修改它并尝试执行超出项目原始范围的事情。 / p>

再次感谢您的帮助肖恩!我希望这有助于其他人!