Форум 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 в качестве кэша для каких то медиа файлов. иначе постоянная запись/чтение убьёт производительность.

in4core 22.09.2014 00:35

Цитата:

если не вызывать flush то запись на диск будет только после закрытия флеш плеера
Закрытие флеш плеера не записывает данные самовольно, это было бы дырой из дыр. Запись только по средставам flush идет.

Nooob 22.09.2014 04:26

Цитата:

Сообщение от in4core (Сообщение 1172315)
Закрытие флеш плеера не записывает данные самовольно

Да ладна http://help.adobe.com/ru_RU/FlashPla...redObject.html
Цитата:

При закрытии приложения общие объекты стираются или записываются на диск. Для явной записи данных на диск можно также вызвать метод flush().

alatar 22.09.2014 11:41

Цитата:

Сообщение от in4core (Сообщение 1172236)
На сколько я помню со - записывает текстовые данные.

В AMF он записывает.

in4core 22.09.2014 19:55

Ну что значит Да ЛАдна?* Сам просто подумай, как происходит запись вообще?
Открыл ты канал, взял переменную например so.data.lang = "ru" флаш не вызвал. Закрыл приложение, далее ты его открыл и пробуешь достать lang вытянется? Это в случае, если такой переменной нет, и в сулчае если она есть. Проверь.

Rzer 22.09.2014 20:19

in4core, опять на тяжелые наркотики подсел?)

MikroAcse 22.09.2014 22:25

Цитата:

Проверь.
Когда только начинал изучать флеш, не знал о такой штуке, как flush.
Переменные сохранялись всегда и без этого. Но с этим безопаснее.

dimarik 22.09.2014 22:30

Мало того, много открытых дескрипторов файлов тоже плохо. Что и делает getLocal() без последующего flush(). Не все ОС вам разрешат безнаказанно открыть их много. Хотя, могу заблуждаться.

in4core 23.09.2014 00:07

dimarik - вот так вот и разочаровываешься в мире иллюзий :) Как так то... за меня что то делают. Яж разработчик , а не пользователь, даж обидно стало :)


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

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