2016-04-21 86 views
0

我一直在许多自定义类上使用ByteArray,我一直需要存储/加载,但是ByteArray似乎永远不会序列化正确扩展MovieClip的自定义类/对象。读取时总是缺少数据或空值。序列化扩展MovieClip的类> DisplayObject

我读过这里,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 
} 

对象(S)的输出被存储

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

显示一些代码?你在使用registerClassAlias吗? – Nemi

+0

经过一些测试后,ByteArray将不会序列化扩展MovieClip的类(一个显示对象)中的任何数据。 我正在用IDataInput和IDataOutput调查IExternalizable,但保持与readExternal()和writeExternal()的签名错误 – Reahreic

+1

如果您需要将MovieClip存储在ByteArray中,那么您的设计很糟糕。你应该提取一些数据模型。该数据模型可以存储为ByteArray。数据恢复时应更新MC。看看Model-View-Controller或Model-View-Presenter模式。 –

回答

0

这是他们为什么说显示和数据应该是分开的。

这里有您需要解决这一心态:

  • 多边形是东西显示。这是连接点 的列表。也许它有基于那些 点的多边形面积或凸面的辅助信息。这里可能还有其他的东西。
  • 然后有一个关于如何绘制多边形的数据。它具有线条粗细,线条颜色。也许是填充。等等
  • 最后但并非最不重要的是有多边形的实际绘图。这是你的DisplayObject

根据想要存储的内容,保存多边形数据和易于序列化的绘图配方数据。

关于反序列化,您将实例化适当的类(DisplayObject)并将数据提供给它。

TL,博士:MVC