Я недавно перенес некоторые из своих проектов в новый Flex 4.6 SDK.Я не ожидал много неприятностей, так как это был только незначительный выпуск.Но на самом деле я получил сотни ошибок повсюду.Эти ошибки в основном исходят от Spark SkinnableComponent
s;например:
override protected function getCurrentSkinState():String {
return mySkinPart.someProperty ? "normal" : "someOtherState";
}
будет отлично работать под 4,5, но выдаст мне ошибку nullpointer
в 4.6.Причина достаточно проста: в 4.6 getCurrentSkinState()
вызывается до создания скинов, тогда как в 4.5 я мог быть уверен, что скины в состоянии по умолчанию будут там.
Дальнейшие исследования привели меня к мысли, чтоначальное состояние скина теперь undefined
вместо первого состояния в массиве States
(пока он не вызовет getCurrentSkinState()
, то есть).
Исправление этих проблем обычно довольно легко и требует от меня лишь немного более оборонительного программирования.Но это не моя настоящая проблема.
Реальная проблема заключается в том, что если жизненный цикл компонента изменился, я бы хотел точно знать, что изменилось и какие частимои проекты могут быть затронуты.
Я был бы очень признателен, если бы кто-то мог пролить свет на это или, по крайней мере, указать мне в нужное место, где я могу прочитать все об этом (потому что единственные заметки о выпуске я могнаходка распространяется только на новые мобильные компоненты).
Редактировать (это не меняет вопроса; я просто хотел поделиться с вами своими выводами)
Другая проблема, с которой я только что столкнулся: модификатор dynamic
, похоже, больше не наследуется подклассами.Это чисто проблема ActionScript, поэтому я думаю, что это компилятор, который обрабатывает его по-разному.
Позвольте мне объяснить.Рассмотрим этот класс:
public class MyClass extends Array { }
Теперь, если я попытаюсь вставить новый элемент в этот пользовательский массив следующим образом:
var t:Array = new MyClass();
t.push("hello");
- SDK 4.5.1: нет проблем
- SDK 4.6: «Невозможно создать свойство 0 в MyClass» во время выполнения
Очевидно, это потому, что массив является динамическим, а MyClass - нет, поэтому его легко исправить:
public dynamic class MyClass extends Array { }
и ошибка исчезла.
Но что, если бы я использовал стороннюю библиотеку с таким кодом, к которой у меня не было доступа к исходному коду?Мое приложение сломалось, и я никак не мог это исправить.Я имею в виду: давай, это не незначительное изменение для точечного релиза.