Как правильно сохранить массив классов через StoredObject?(AS3) - PullRequest
0 голосов
/ 09 августа 2011

в моей текущей программе у меня есть класс, который действует как контейнер для соответствующих данных. Допустим, это класс 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();

И после этого я перебираю массив для отображения каждого возраста. Важно отметить, что только возраст, установленный во время текущей загрузки программы. Все из предыдущих прогонов сохраняются в том, что массив все еще заполнен людьми, но все их возрасты теперь установлены на 0.

Буду признателен за любую помощь в этом, ничто из того, что я нашел, не поможет.

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Эта статья должна помочь вам найти решение вашей проблемы.http://jaycsantos.com/flash/the-trick-to-using-sharedobject/

установите флажок «Не используйте прямые ссылки на объекты и используйте данные игры, только не реальные игровые объекты».абзац в частности

0 голосов
/ 09 августа 2011

Хорошо, после ввода правильных терминов в Google я нашел этот слепок:

"Если класс не реализует и не наследует от класса, который реализует интерфейс IExternalizable, то экземпляркласс будет сериализован с использованием механизма по умолчанию только для открытых членов. В результате частные, внутренние и защищенные члены класса будут недоступны. "

Итак, поэтому моя личная информацияне сохраняетИсправление заключается в реализации IExternalizable.Вот как я его кодировал, работает как шарм:

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

        output.writeInt(myAge);
    }

    public function readExternal(input:IDataInput):void {

        myAge = input.readInt();
    }

Так легко, когда я смотрю на это, хаха.Обратите внимание, что мне также нужно было зарегистрировать псевдоним класса, чтобы сохранить свой собственный класс.Ничего особенного, хотя.Надеюсь, что кто-то еще может

...