Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка addItemAt() в ArrayCollection (http://www.flasher.ru/forum/showthread.php?t=144817)

altermann 21.09.2010 23:42

Ошибка addItemAt() в ArrayCollection
 
Здравсвуйте.

имеется массив:

public var xxx:ArrayCollection = new ArrayCollection();

пытаюсь добавить в него объект с помощью addItemAt()

var myObj:myType = new myType();
xxx.addItemAt(myObj, 1);

выдает ошибку:
Index '1' specified is out of bounds.

Понимаю, что это происходит потому, что в xxx нет ни одного элемента, нудно начинать добавлять с индекса 0, тогда все хорошо, но, возможно ли как-то начать заполнение массива не с нулевого, а первого, например, или пятого элемента?

гугление привело к такой статье: addItemAt() in ArrayCollection

попробовав сделать то, что там предлагают (может и не все попробовал, за плохим знанием английского), не пришел ни к какому результату.

А пробовал я такой способ объявления:
public var xxx:ArrayCollection = new ArrayCollection(new Array(size));

так же там предлагается использовать сортировку, но очень не хотелось бы это делать.

Может кто-нибудь сталкивался с таким вопросом?

Спасибо.

Korben 22.09.2010 06:14

если известен максимальный размер массива - заполни его предварительно пустыми значениями, а потом просто заполняй пустоту своими данными.

i.o. 22.09.2010 06:57

а чем обычный массив Array не подходит? Возможно я упускаю из вида какие-то преимущества ArrayCollection..

altermann 22.09.2010 11:47

в принципе, массив вполне подходит, что-то я не подумал, что там такой проблемы может не быть, спасибо =)

но это еще не все, у меня используется <s:Group> в который я пытаюсь добавлять свои компоненты (основанные на <s:Group>) при помощи addElementAt() и там та же проблема. Массивом тут не заменишь =)
может есть варианты?

я вспомнил почему я использовал ArrayCollection, как минимум, мне надо удалять объекты из массива, не зная индекс, но теперь думаю, что индекс я знаю=) так что массив пока меня устраивает... То есть у ArrayCollection есть такие замечательные функции, как getItemIndex и removeItemAt.


Добавлено через 2 минуты
Цитата:

Сообщение от Korben (Сообщение 937700)
если известен максимальный размер массива - заполни его предварительно пустыми значениями, а потом просто заполняй пустоту своими данными.

пробовал, честно, но появляется другая ошибка, не могу сейчас сказать какая точно, но суть примерно такая: "не могу работать с объектом null" или ссылается он на объект null, не помню.
Да и количество элементов, в общем-то, не известно заранее. Известно только максимальное количество элементов, но их может быть и меньше

i.o. 22.09.2010 14:41

Цитата:

я вспомнил почему я использовал ArrayCollection, как минимум, мне надо удалять объекты из массива, не зная индекс, но теперь думаю, что индекс я знаю=) так что массив пока меня устраивает... То есть у ArrayCollection есть такие замечательные функции, как getItemIndex и removeItemAt.
Вообще то в обычном массиве это тоже без проблем можно делать:
getItemIndex - это indexOf()
removeItemAt - splice( index, 1 )

И потом, вы можете пользоваться обычным массивом, а потом, при необходимости, из него уже создавать ArrayCollection.

alatar 22.09.2010 14:58

Цитата:

у меня используется <s:Group> в который я пытаюсь добавлять свои компоненты (основанные на <s:Group>) при помощи addElementAt() и там та же проблема. Массивом тут не заменишь =) может есть варианты?
А как вы себе это представляли? Это как строить дом: построили первый этаж, потом оставили пустоту и построили сразу 8-й. Единственное что вы можете, вклинить еще один этаж между уже существующими.
Насчет ArrayCollection. Старайтесь избегать использования этого класса, он слишком тяжелый для "повседневных" задач. Единственный случай когда его следует использовать, это если есть необходимость автоматически фильтровать данные.

altermann 22.09.2010 19:34

Цитата:

Сообщение от i.o. (Сообщение 937784)
Вообще то в обычном массиве это тоже без проблем можно делать:
getItemIndex - это indexOf()
removeItemAt - splice( index, 1 )

СПАСИБО!!!! =)))

Добавлено через 1 минуту
Цитата:

Сообщение от alatar (Сообщение 937798)
А как вы себе это представляли? Это как строить дом: построили первый этаж, потом оставили пустоту и построили сразу 8-й. Единственное что вы можете, вклинить еще один этаж между уже существующими.
Насчет ArrayCollection. Старайтесь избегать использования этого класса, он слишком тяжелый для "повседневных" задач. Единственный случай когда его следует использовать, это если есть необходимость автоматически фильтровать данные.

Спасибо за разъяснение. В общем-то я придумал как это сделать. Вся проблема в том, что у меня два разных компонента и непонятно какой на каком месте будет. Поэтому я сделал еще один промежуточный компонент, им заполняю основной Group при инициализации, а в нем уже подключаю нужный мне компонент в нужное время.


Часовой пояс GMT +4, время: 17:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.