在我当前的程序中,我有一个类作为相关数据的容器。假设它是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。
对此的任何帮助将不胜感激,我似乎没有找到帮助。
答案 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();
}
,现在我很容易看到它,哈哈。请注意,我还需要注册类别名以保存我的自定义类。没什么大不了的。希望别人可以