Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Boolean и SharedObject (http://www.flasher.ru/forum/showthread.php?t=208919)

Digital 18.09.2014 20:34

Boolean и SharedObject
 
Если я хочу сохранять булин в шейред обджект, то для каждой ли переменной надо создавать отдельный getLocal() или как-то в один можно запихнуть? Я просто не совсем понимаю принцип работы SharedObject

in4core 18.09.2014 23:56

А чего там понимать в справке все написано. Конечно досточно объявить 1 раз

Digital 19.09.2014 00:24

Код AS3:

public var shortE:Boolean = false,
                      _shortE:SharedObject
//функция для выгрузки, идёт без void
private function sharedObjectView1()
                {
                        _shortE= SharedObject.getLocal('shorty');               
                        if (_shortE.data)
                        {
                                shortE = _shortE.data;
                        }
}
//функция сохранения
private function saveo(event:TouchEvent):void
                {
                        _shortE.data['text'] = shortE
 
                        _shortE.flush();
 
                }

Так вот сразу после запуска приложения, при запуске функции saveo я трейшу shortE и он тру, больше нигде его не изменяю. Способ сохранения неправильный, ['text'] использую для сохранения намбер переменных, а тут как быть? Справка молчит про булин в шаред

Добавлено через 3 минуты
Код AS3:

public var shortE:Number = 0,
                      _shortE:SharedObject
//функция для выгрузки, идёт без void
private function sharedObjectView1()
                {
                        _shortE= SharedObject.getLocal('shorty');               
                        if (_shortE.data['text'])
                        {
                                shortE = _shortE.data['text'];
                        }
}
//функция сохранения
private function saveo(event:TouchEvent):void
                {
                        _shortE.data['text'] = shortE
 
                        _shortE.flush();
 
                }

Такая реализация с числами работала, проверял 0 или 1, но это всего лишь костыль, а нормально булины понять не могу

GBee 19.09.2014 00:50

а я себе писал маленький кукименеджер
Код AS3:

import flash.net.SharedObject;
        public class CookieManager
        {
                public static var storeName:String = "";
                public static function getCookie(name:String, defaultValue:Object = null):Object
                {
                        var so:SharedObject = SharedObject.getLocal(storeName, "/");
                        var res:Object = so.data[name];
                        if(res==null)
                                return defaultValue;
                        return res;
                }
 
                public static function saveCookie(name:String, value:Object):void
                {
                        var so:SharedObject = SharedObject.getLocal(storeName, "/");
                        so.data[name] = value;
                        so.flush();
                }
        }

Только бульон все равно как 1/0 записывал. Кстати, надо было сразу метод в него же дописать.

Digital 19.09.2014 00:54

Так SharedObject, это ж не совсем куки) Из хтмл или ДжС к ним не обратишься. ExternalInterface - куки. Ну сейчас не об этом. То-есть 0-1 приемлемое решение?

alexandrratush 19.09.2014 01:11

SharedObject своего рода флеш-куки, товарищ GBee имел это ввиду.
P.S. Для просмотра локальных SO я использую утилиту http://blog.coursevector.com/minerva, очень удобно.

alexcon314 19.09.2014 08:41

GBee, твой пример дает нормальный Boolean:
Код AS3:

saveCookie("foo", true);
var o:Object = getCookie("foo", false);
trace(o is Boolean, o); // true, true

Цитата:

hexdump -C test.sol
00000000 00 bf 00 00 00 1a 54 43 53 4f 00 04 00 00 00 00 |......TCSO......|
00000010 00 04 74 65 73 74 00 00 00 03 07 66 6f 6f 03 00 |..test.....foo..|
0x03 - Boolean true, согласно спецификации AMF3.

in4core 19.09.2014 13:12

alexcon314 - тут скорее интерпретатор виноват. На сколько я помню со - записывает текстовые данные. И там скорее всего идет перевод. Типа такого
if(a == "true" || a == true ) a as Boolean
Тоесть со в любом случае как txt документ получается вроде бы

GBee 19.09.2014 16:02

Цитата:

GBee, твой пример дает нормальный Boolean
:eek: Эээ, а, э. Почему я его так не использую?
Там какая то фигня была, вроде все в стринги переводилось раньше? Блин.

Nooob 19.09.2014 22:55

на самом деле есть очень большая разница между вызов getLocal или один getLocal с сохранением ссылки на so.
вызов getLocal читает файл с диска и при выходе из области видимости записывает в файл и помечает выделенные объекты для очистки мусора. если держать ссылку на so то чтение и запись будет один раз. если не вызывать flush то запись на диск будет только после закрытия флеш плеера. это очень важно понимать, если используешь so в качестве кэша для каких то медиа файлов. иначе постоянная запись/чтение убьёт производительность.


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

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