Я тоже поймал эту проблему, нашел твой вопрос, но я так и не решил его, как предложил Кристоф.
Поработав некоторое время, я нашел один способ избежать упомянутых вами проблем.
Просто используйте вспомогательную коллекцию ArrayCollection, чтобы выполнить сортировку . В любом случае, ваш экземпляр Sort кажется временным (вы хотите его удалить), так почему бы не использовать временную коллекцию ArrayCollection?
Вот как выглядел мой код:
// myArrayCollection is the one to sort
// Create the sorter
var alphabeticSort:ISort = new Sort();
var sortfieldFirstName:ISortField = new SortField("firstName",true);
var sortfieldLastName:ISortField = new SortField("lastName",true);
alphabeticSort.fields = [sortfieldFirstName, sortfieldLastName];
// Copy myArrayCollection to aux
var aux:ArrayCollection = new ArrayCollection();
while (myArrayCollection.length > 0) {
aux.addItem(myArrayCollection.removeItemAt(0));
}
// Sort the aux
var previousSort:ISort = aux.sort;
aux.sort = alphabeticSort;
aux.refresh();
aux.sort = previousSort;
// Copy aux to myArrayCollection
var auxLength:int = aux.length;
while (auxLength > 0) {
myArrayCollection.addItemAt(aux.removeItemAt(auxLength - 1), 0);
auxLength--;
}
Это не самый лучший код, у него есть несколько странных хаков, таких как auxLength вместо aux.length (этот дал мне исключение в диапазоне -1 массива), но по крайней мере это решило мою проблему.