如何通过StoredObject正确保存类的数组? (AS3)

时间:2011-08-08 20:08:52

标签: flash actionscript-3 serialization storage

在我当前的程序中,我有一个类作为相关数据的容器。假设它是Person类。 Person具有私有myAge:int属性,该属性在程序运行时设置。此外,Person被添加到一个数组并保存。然后调用阵列中的所有人并跟踪年龄。以下是感兴趣的主要代码:

// In the Document class. 
registerClassAlias("Person", Person); 
registerClassAlias("AddressBook", AddressBook);
myAddressBook = new AddressBook();
myAddressBook.addNewPerson(75);


// In the AddressBook class when a new AddressBook is created:
// I load the addressEntries, which is an array that will contain instances of Person class.

sharedObjectAddressEntries = SharedObject.getLocal("storedAddressEntries");

if(sharedObjectAddressEntries.data.storedAddressEntries != null)
{
    addressEntries = sharedObjectAddressEntries.data.storedAddressEntries;
}
    else
    {
        addressEntries = new Array();
    }

// This is what I do to add a Person to the array:
var aPersonEntry:Person = new Person();
aPersonEntry.addAge(anAge); // This just sets private field to anAge.
addressEntries.push(aPersonEntry);
saveStoredPeople();       

//This is how I save them:
sharedObjectAddressEntries.data.storedAddressEntries = addressEntries;

        sharedObjectAddressEntries.flush();

然后我循环遍历数组以显示每个年龄。需要注意的重要一点是,只有在当前程序加载期间设置的年龄。保存以前运行的所有数据,因为数组仍然填充了People,但现在所有年龄都设置为0。

对此的任何帮助将不胜感激,我似乎没有找到帮助。

2 个答案:

答案 0 :(得分:1)

本文应该可以帮助您找到问题的解决方案。 http://jaycsantos.com/flash/the-trick-to-using-sharedobject/

检查“不要使用直接引用对象并仅使用游戏的数据而不是实际的游戏对象”。特别是段落

答案 1 :(得分:0)

好的,在Google中输入正确的条款后,我发现了这个金块:

  

“如果一个类没有实现,也没有继承自哪个类   实现,IExternalizable接口,然后是一个实例   class将使用public成员的默认机制进行序列化   只要。因此,类的私有,内部和受保护成员   将无法使用。“

所以,这就是为什么我的私人信息无法保存。 修复是实现IExternalizable。这就是我编码的方式,就像一个魅力:

public class Person implements IExternalizable
public function writeExternal(output:IDataOutput):void {

        output.writeInt(myAge);
    }

    public function readExternal(input:IDataInput):void {

        myAge = input.readInt();
    }
,现在我很容易看到它,哈哈。请注意,我还需要注册类别名以保存我的自定义类。没什么大不了的。希望别人可以