Flex 4 / Границы настройки Air для WindowedApplication - PullRequest
1 голос
/ 09 июля 2010

по какой-то причине этот код flex 4 выдает мне ошибку, но я не могу понять, почему. По моему WindowedApplication у меня есть:

var prefs:Object = fs.readObject();
fs.close();
var rect:Rectangle = new Rectangle();
rect = prefs.bounds as Rectangle;
this.bounds = rect;  // error here

Сообщение об ошибке: ArgumentError: Ошибка № 2007: параметр rect должен быть ненулевым.

Первоначально я также пробовал это без объекта прямоугольника и только что сделал:

this.bounds = prefs.bounds as Rectangle;

, которая дает мне следующую ошибку:

Ошибка типа: ошибка # 1034: сбой приведения типа: невозможно преобразовать объект @ 1dbbe1f1 в flash.geom.Rectangle.

Это кажется фиктивной ошибкой, поскольку я могу назначить pref.bounds для rect без ошибок. Я не знаю, почему это не работает. Он работает в режиме совместимости с flex 3, но это также ломает многие мои искровые компоненты, поэтому я не могу его использовать.

1 Ответ

0 голосов
/ 09 июля 2010
rect = prefs.bounds as Rectangle;

rect заканчивается как null, потому что prefs.bounds не является экземпляром класса Rectangle. Приведение с as ключевыми словами возвращает null, если это не удается.

Просто наберите trace(prefs.bounds); после вызова readObject, чтобы увидеть, что в нем содержится.


Обновление:

Тот факт, что значение в prefs.bounds имеет свойства x, y, width и height, не делает его объектом Rectangle - это просто объект с этими четырьмя свойствами. Простое решение - создать объект Rectangle из этих значений и использовать его:

var prefs:Object = fs.readObject();
var rect:Rectangle = new Rectangle(prefs.bounds.x, prefs.bounds.y, prefs.width, prefs.height);
this.bounds = rect;

Если вы вызовете registerClassAlias ​​ перед записью объекта прямоугольника в файловый поток, readObject вернет объект соответствующего типа вместо общего.

registerClassAlias("flash.geom.Rectangle", Rectangle);
fs.writeObject(this.bounds);

//later...
//Casting with () will throw an error if the read object is not a Rectangle
var rect:Rectangle = Rectangle(fs.readObject());
trace(rect);
...