我一直在我需要存储/加载的许多自定义类上使用ByteArray,但ByteArray似乎永远不会序列化正确扩展MovieClip的自定义类/对象。在读取时总会丢失数据或空值。
我在这里读到AMF无法序列化displayObjects,并想知道我是否可以使用一个好的解决方案? (没有将数据obj分流到Json并将字符串反馈给我的保存。)
进出ByteArray
public static function _SaveTRData(trData:Object):String{
if(_trackerComp == null){
return "ERR: -1";
}
var resp:String = "";
var bytes:ByteArray = new ByteArray();
bytes.writeObject(trackerData);
resp = _trComp.SaveTRData(bytes);//to SQLlite db methods
if(resp != ""){
_tr.UpdateStatusMessage(resp);
}
return resp;
}
public static function _GetTRData(fileName:String):Object{
if(_trComp == null){
return null;
}
var resp:ByteArray = _trComp.GetTRData(fileName);//from SQLlite db methods
resp.position = 0;
return(resp.readObject());//returned object is passed into graphics pipeline to redraw contained data elements
}
存储的对象
var trackerData:Object = {arrPolys:new Array(), arrLabels:new Array()};
trackerData.arrPolys = maps.arrPolys();
trackerData.arrLabels = maps.arrLabels();
//Truncated, contains more arrays of objects...
//Each object in arrPolys is a
public class Polygon extends MovieClip{
//3 private uints
//3 private bools
//1 private array
//3 private custom class Line which extends Shape
}
//Each object in arrLabels is a
public class Label extends MovieClip{
//Several private strings
//Several private dynamically generated graphic components
//Several private label specifications (Strings, Ints, Booleans)
}
答案 0 :(得分:0)
这就是他们说显示和数据应该分开的原因。
以下是解决这个问题所需要的心态:
DisplayObject
。根据您要存储的内容,您可以保存可轻松序列化的多边形数据和绘图配方数据。
在反序列化时,您实例化相应的类(DisplayObject
)并将数据提供给它。
tl,dr :MVC