由于某种原因,这个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必须为非null。
我最初也尝试过没有rect对象,只是做了:
this.bounds = prefs.bounds as Rectangle;
这给了我以下错误:
TypeError:错误#1034:类型强制失败:无法将Object @ 1dbbe1f1转换为flash.geom.Rectangle。
这似乎是一个虚假的错误,因为我可以在没有错误的情况下为pre分配pref.bounds。我不知道为什么这不起作用。它在flex 3兼容模式下工作,但这也打破了很多我的火花组件,所以我不能使用它。
答案 0 :(得分:0)
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);