Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Flashbuilder(移动设备)中的Singleton类ArrayCollection是否为空?_Android_Apache Flex_Singleton_Flash Builder - Fatal编程技术网

Android Flashbuilder(移动设备)中的Singleton类ArrayCollection是否为空?

Android Flashbuilder(移动设备)中的Singleton类ArrayCollection是否为空?,android,apache-flex,singleton,flash-builder,Android,Apache Flex,Singleton,Flash Builder,我目前正在尝试实现一个Singleton类,以便存储一个项目的ArrayCollection,然后我可以在我的应用程序的整个生命周期中访问和操作这些项目。我创建了下面的Singleton类,该类用于保存ArrayCollection信息: package valueObjects { import mx.collections.ArrayCollection; [Bindable] public class Model { private s

我目前正在尝试实现一个Singleton类,以便存储一个项目的ArrayCollection,然后我可以在我的应用程序的整个生命周期中访问和操作这些项目。我创建了下面的Singleton类,该类用于保存ArrayCollection信息:

package valueObjects
{
    import mx.collections.ArrayCollection;  

    [Bindable]
    public class Model
    {
        private static var instance:Model = new Model();

        public var ids:ArrayCollection = new ArrayCollection();

        public function Model()
        {
            if(instance)
            {
                trace("New instance cannot be created. Use Singleton.getInstance()");
            }
        }

        public static function getInstance():Model
        {
            return instance;
        }
    }
}
然后,我在应用程序的Deafult主页上创建了以下代码,以便在应用程序启动后立即填充ArrayCollection:

        import valueObjects.Model;          

        protected var models:Model = new Model();

                private function loop():void
        {
            var index:int;
            for( index = 0; index < compsCollection.length; index++ )
            {
                trace( "Element " + index + " is " +  compsCollection[index].comp_id );
                            models.ids.addItem(compsCollection[index].comp_id);
                trace(models.ids.length);
            }               
        }
Singleton类中的ArrayCollection正在填充,因为我在循环中输入的跟踪语句清楚地显示了ArrayCollection中的数据构建。但是,当我移动到应用程序中的另一个视图时,我会尝试使用以下代码访问Singleton类中的此ArrayCollection:

import valueObjects.Model;

protected var models:Model = Model.getInstance();
protected var test:ArrayCollection = new ArrayCollection();

protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
            {

                var index:int;
                trace("Array Length =" + models.ids.length);
                for( index = 0; index < models.ids.length; index++ )
                {
                    trace( "Element " + index + " is " + models.ids[index].comp_id );
                    test.addItem(models.ids[index].comp_id);
                }   
                testbox.text = test.toString(); 
            }
现在我遇到的问题是,当我尝试访问此ArrayCollectionId时,出于某种原因,它似乎是空的。我已经包含了一条跟踪语句,它还表示ArrayCollection的长度为0。有人能帮忙吗?

试试这个

public static function getInstance():Model
{
    if(instance == null)
      instance= new Model();

    return instance;
}
这里不需要给变量赋值

protected var models:Model = Model.getInstance();
直截了当地使用

Model.getInstance().ids = new ArrayCollection();
试试这个,
这可能对你有帮助。

在主类中,将新模型更改为Model.getInstance。然而,您仍处于项目的初始阶段,您有机会避免单身会给您带来的问题。我鼓励您直接使用依赖项注入,只需使用data属性,或者更抽象地使用依赖项注入框架,如Robotlegs、Swiz、Mate或Parsley。

感谢您的快速回复,我已经将Singleton类getInstance更改为您在第一段代码中建议的类型,其余的保持不变,然后,我删除了视图中变量的赋值,该视图尝试访问ArrayCollection,最后我将ArrayCollection的所有访问参数更改为与您所说的Model.getInstance.ids.length相同。测试完后,由于某种原因,ArrayCollection长度仍然返回0。这真的很烦人,你能进一步帮助我吗?我也研究过使用FlexGlobals,但是我无法让它们在我的主默认视图上正确地查看ArrayCollection,因为它说它没有设置或初始化,我真的很想得到一些关于排序这个问题的帮助,因为我真的需要在我的应用程序中访问全局变量。Thanks@user723858现在我明白了,将实例设为publichHi,我只是在Singleton类中更改了以下行:public static var instance:Model=new Model;现在它公开了,而不是私下。但是,当我启动应用程序时,它就会崩溃,并显示错误1009:无法访问空对象引用的属性或方法。这发生在我刚换过的线路上,有什么想法或者我做错了吗??感谢不要在那里制作实例新模型;因为我们可以在getinstance中实现。我认为静态变量首先创建。你是不是建议我使用持久性管理器在我的项目中存储ArrayCollection?我是说,一种方法是在pushView的第二个参数中引用你的AC。或者您可以使用一个框架,它监视新视图添加到显示列表中,并提供它所需的内容。或者,您可以创建一些类似于框架的东西,方法是监听添加的\u TO \u STAGE,捕获新实例,并为其提供所需的信息。有各种各样的事情,你可以做,不会导致你自己纠结在泥沼你会邀请使用单身。