ArrayCollection has some nifty functionality, but it isn’t always a smooth sailing.

Gotcha 1: addItemAt doesn’t work if the ArrayCollection is sorted. Well, it does make sense, but there are situations when we could take advantage of the fact that sorting doesn’t happen before a refresh() call. Anyway, something that IMHO should be mentioned in the docs rather than only in ListCollectionView source: “if we’re sorted addItemAt is meaningless, just add to the end”.

Gotcha 2: Well, say, that we insist of using our collection, and so we try to remove the sorting to be able to do a meaningfull addItemAt. We set ac.sort=null; but instead of a great success, things explode on addItemAt. Well, the internal logic of ListCollectionView requires you to do a ac.refresh() after setting sort to null; if you don’t do that, it’s internal vars are out of whack and null references creep in. IMHO ArrayCollection should be smart enough to handle removal of sort without a subsequent refresh call.

Gotcha 3: Well, we call the ac.refresh() after setting ac.sort=null but now our item order is all screwed up. Epic phail. So, let’s just give up and copy the collection instead, shall we?

1
var ac1:ArrayCollection = new ArrayCollection(ac0.toArray());