2013-05-06 57 views
0

我使用Flash Builder創建一些使用SharedObjects的動作代碼。 第一個問題:如何在Flash Builder中刪除本地SharedObject?我正在調試我的程序,SharedObject sems在運行之間持續存在。我想從沒有存儲我的數據的SharedObject開始新鮮和乾淨。我如何擺脫它?Flash Builder中的SharedObject和Dictionary問題

此外,在我的SharedObject中,我使用mySharedObject.data [「mykey」]來存儲Dictionary。該字典將包含字符串鍵和MyCustomClass的值。問題是,當我稍後嘗試遍歷此Dictionary的值時,出現錯誤#1034無法將對象轉換爲MyCustomClass類型。看起來好像我可以將一個MyCustomClass類型的項目放到這個字典中,但是我不能將這個項目作爲對象以外的任何東西取出來。

任何想法是什麼問題?

回答

2

這些基本上是兩個問題,所以應該被問爲兩個問題。無論如何,我會在這裏回答他們,但仍然傾向於將它們分成兩部分(可能爲了參考而將其分開):

本地共享對象,對於跨運行的持久性非常有用。然後有SharedObject.clear()根據需要清除狀態。

對於第二個問題,將共享對象的serialize對象轉換爲AMF,以便它可以寫入磁盤或使用RTMP通過網絡發送。現在,您的自定義課程不能在AMF中真實地爲serialized。實際發生的是,公共屬性(和動態的,如果該類被聲明爲動態的)被序列化到結構中。所以,公共數據被存儲......但它本質上是一個普通的Object。 要解決該問題,可以使用

public static readFrom(object:Object):MyCustomClass
類型函數,該函數將讀取傳遞對象中的屬性以構造表示該信息的
new MyCustomClass

有許多方法可以將您的類註冊到存儲在SharedObject中的播放器中(請參閱here)...但是您需要確保反序列化該數據的代碼也知道該類。

1

要使一個類可用於轉換,請在全局初始化中使用registerClassAlias()調用MyCustomClass及其完全限定名稱作爲參數。 The manual.說你的自定義類是foo.bar.TheClass,你寫的:

registerClassAlias('foo.bar.TheClass',foo.bar.TheClass); 

爲了刪除舊SO使用delete電話對so.data["mykey"]so.flush()。編輯:SharedObject.clear()是更好的方式。

0

1 /持久化是SharedObject的一個特殊性。要清除所有內容,您需要調用clear方法。

var shareObject:SharedObject = SharedObject.getLocal('justatest'); 
shareObject.data.test = 'test'; 
trace(shareObject.data.test) 
shareObject.clear(); 
trace(shareObject.data.test) 

輸出

test 
undefined 

2 /要存儲在SO複雜數據類型,則需要使用flash.net.registerClassAliasexample here