Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сохранение типизированных объектов с помощью SharedObject (http://www.flasher.ru/forum/showthread.php?t=124115)

Dimonte 21.04.2009 16:28

Сохранение типизированных объектов с помощью SharedObject
 
Вложений: 1
У меня возникла некоторая проблема с сохранением объектов. Я пытаюсь сохранить и затем считать типизированный объект. С сохранением проблем нет, но вот считывание не работает.

Код, иллюстрирующий проблему:
Код AS3:

package  
{
        import flash.net.SharedObject;
 
        public class SharedObjectTester
        {               
                public function SharedObjectTester()
                {                       
                        if (SharedObject.getLocal("SharedObjectTest", "/").data.objectTest as TestClass)
                        {
                                trace("Object already created.");
                        } else {
                                trace("Creating and saving new object.");
                                SharedObject.getLocal("SharedObjectTest", "/").data.objectTest = new TestClass("objectTest");
                                SharedObject.getLocal("SharedObjectTest", "/").flush();
                        }
                }
 
                public function launchTest():void
                {
                        // Declaring a test object.
                        var testObject:TestClass;
 
                        //Checking property. Succesfull, BUT the object is of the wrong type.
                        trace(SharedObject.getLocal("SharedObjectTest", "/").data.objectTest.objectName, SharedObject.getLocal("SharedObjectTest", "/").data.objectTest is TestClass);
 
                        // Trying the simple assignement. Coercion error.
                        try
                        {
                                testObject = SharedObject.getLocal("SharedObjectTest", "/").data.objectTest;
                        } catch (e:Error)
                        {
                                trace(e.message);
                        }
 
                        // Trying to typecast. Coercion error.
                        try
                        {
                                testObject = TestClass(SharedObject.getLocal("SharedObjectTest", "/").data.objectTest);
                        } catch (e:Error)
                        {
                                trace(e.message);
                        }
 
                        // Evaluating with "as" keyword. Returns null.
                        trace(SharedObject.getLocal("SharedObjectTest", "/").data.objectTest as TestClass);
                }
 
        }
 
}

Код AS3:

package  
{
        public class TestClass
        {
                public var objectName:String;
 
                public function TestClass(objectName:String)
                {
                        this.objectName = objectName;
                }
 
        }
 
}

Сорц приложен.

Я знаю, что SharedObject приучен работать только с базовыми типами, но дело в том, что объект сохраняется нормально, не получается только его привести к нужному типу при считывании.

Заранее спасибо за любую помощь.

BlooDHounD 21.04.2009 16:46

Код AS3:

class Test {
 
        public function Test(test:String='') {
                super();
                this.test = test;
        }
 
        public var test:String;
 
        public function toString():String {
                return '[Test test="' + this.test + '"]';
        }
 
}

Код AS3:

import flash.net.registerClassAlias;
import flash.net.SharedObject;
 
registerClassAlias( 'Test', Test ); // регистрируем класс, для AMF
var so:SharedObject = SharedObject.getLocal( 'test' );
so.data.test = new Test( 'test' ); // записываем

Код AS3:

import flash.net.registerClassAlias;
import flash.net.SharedObject;
 
registerClassAlias( 'Test', Test ); // регистрируем класс, для AMF
var so:SharedObject = SharedObject.getLocal( 'test' );
trace( so.data.test ); // читаем: [Test test="test"]


Dimonte 21.04.2009 17:11

Огромное спасибо, все работает.

Появился, правда, еще вопрос. Если использовать registerClassAlias, необходимо ли в своем классе указывать дефолтные значения для всех параметров конструктора? Попробовал регистрацию со своим классом, без дефолтных значений параметров, при считывании вылетала ошибка с нехваткой параметров для конструктора.

BlooDHounD 21.04.2009 17:21

либо все дефолтные, либо вообще без параметров.


Часовой пояс GMT +4, время: 23:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.