ActionScript3: как инициализировать длину массива в объекте после того, как он был объявлен? - PullRequest
0 голосов
/ 24 февраля 2012

Я использую класс AS3:

package {
    public class PeopleInfo {
        public var elements:int;
        public var PeopleName:Array;
        public var PeopleInt:Array;
        public var PeopleDecimal:Array;
    }
}

В другом файле, который я получил:

<?xml version="1.0" encoding="utf-8"?>
<s:Application 
    creationComplete="initApp()"
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[
        public var ii:int;  

        public var dataWriteToDB:PeopleInfo = new PeopleInfo;

        public function initApp():void
        {
            // Initialize data provider array.

            var int_data:Array = new Array(10, 20, 30, 40, 50);
            var decimal_data:Array = new Array(13.11, 23.34, 35.69, 43.29, 58.92);
            var name:Array = new Array("Joe", "Karen", "Simon", "Greg", "Alice");

            dataWriteToDB.elements = 5; // number of elements in array

            for (ii = 0; ii < dataWriteToDB.elements; ii++)
            {
                dataWriteToDB.PeopleName[ii] = name[ii];
                dataWriteToDB.PeopleInt[ii] = int_data[ii];
                dataWriteToDB.PeopleDecimal[ii] = decimal_data[ii];
            } 

        }
and so on...

Я получаю ошибку во время выполнения: Error #1009: Cannot access a property of method of a null object reference ссылается на первую строку цикла for dataWriteToDB.PeopleName, поскольку он равен NULL.

Я предполагаю, что проблема здесь в том, что хотя dataWriteToDB объявлен изначально, длины массивов для массивов в классе PeopleInfo еще не установлены.Или не уверен, иначе, почему это NULL.Кто-нибудь знает, как это прояснить?

1 Ответ

1 голос
/ 24 февраля 2012

Массивы не были инициализированы в классе. Вы должны сделать это в объявлении:

package {
    public class PeopleInfo {
        public var elements:int;
        public var PeopleName:Array = [];
        public var PeopleInt:Array = [];
        public var PeopleDecimal:Array = [];
    }
}

Также рассмотрите возможность использования push для добавления элементов в массив, чтобы избежать случайного доступа к несуществующему индексу:

        for (ii = 0; ii < dataWriteToDB.elements; ii++)
        {
            dataWriteToDB.PeopleName.push(name[ii]);
            dataWriteToDB.PeopleInt.push(int_data[ii]);
            dataWriteToDB.PeopleDecimal.push(decimal_data[ii]);
        } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...