2016-04-21 82 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