Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.09.2014, 20:48
Youngflasher вне форума Посмотреть профиль Отправить личное сообщение для Youngflasher Найти все сообщения от Youngflasher
  № 1  
Ответить с цитированием
Youngflasher

Регистрация: Jan 2014
Сообщений: 27
По умолчанию #1034 type coercion failed

Здравствуйте.
Помогите разобраться с проблемой приведения типов.
Записываю в файл коллекцию объектов моего класса.
Кода поднимаю файл, то возвращается коллекция объектов класса Object.
Все поля класса и данные в порядке, все возвращается как надо, вот только надо чтоб это в результате была именно коллекция объектов моего класса.
Код AS3:
var object:Object = new Object() as myClass // object = null
var object:Object = myClass(new Object()) //#1034 type coercion failed..


Последний раз редактировалось Youngflasher; 20.09.2014 в 00:03.
Старый 19.09.2014, 20:56
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 2  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
В as3 типизированная коллекция, это Vector<T>

Старый 19.09.2014, 21:55
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
из приведенного кода нифига не понятно, что там нужно сделать, и что реально происходит.
Но можно точно сказать, что Result - это точно Object. Но Object - это не Result.
Проще говоря, возможно только обратное преобразование, вот такое:
Код AS3:
Object(new Result());
__________________
Ко мне можно и нужно обращаться на ты)

Старый 19.09.2014, 22:36
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 4  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
мб,
Код AS3:
var object:Object = new Result();
__________________
interplanety

Старый 20.09.2014, 00:06
Youngflasher вне форума Посмотреть профиль Отправить личное сообщение для Youngflasher Найти все сообщения от Youngflasher
  № 5  
Ответить с цитированием
Youngflasher

Регистрация: Jan 2014
Сообщений: 27
Ошибся, исправил, я просто показал два варианта приведения типов, что пробовал.

Цитата:
Сообщение от Gerbert Посмотреть сообщение
В as3 типизированная коллекция, это Vector<T>
Но мне же все равно в результате вернется Vector<Object> ?

Старый 20.09.2014, 00:16
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 6  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Вы или конкретный пример покажите или откажитесь от этой затеи вообще.

Могу сказать полную ерунду, но если что, меня поправят -
Код AS3:
public class Zero
{
	public function Zero()
	{
		//
	}
}
 
public class One extends Zero
{
	public function One()
	{
		//
	}
}
 
public class Two extends One
{
	public function Two()
	{
		//
	}
}
// Вы можете так
var object: Object = new Two( ) as One;
var object: Object = new One( ) as Zero;
// Но не можете вот так
var object: Object = new Zero( ) as Two;
А так как классы без объявления extends наследуются от Object, то по той же аналогии
Вы не можете базовый класс привести к своему классу.

Это касаемо объектов с примитивами наверное немного по другому дела обстоят.

Добавлено через 3 минуты
Вы объясните, что Вам нужно из всего этого?

Добавлено через 5 минут
Код AS3:
package
{
	public class Main
	{
		public function Main()
		{
			this = new Object( ) as ИграКаторуюЯХочу;
		}
	}
}
Так тоже не получится.

Старый 20.09.2014, 09:32
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 7  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Youngflasher

Вы все время пытаетесь вызвать конструктор Object, а хотите в результате получить экземпляр своего класса. Откуда флеш должен понять, что ему нужно делать экземпляры вашего класса? Вы сделали Object и естественно привести к типу расширяющему Object вы не можете. Создавайте экземпляры своего класса
Код AS3:
new myclass()
__________________
interplanety

Старый 22.09.2014, 15:13
Youngflasher вне форума Посмотреть профиль Отправить личное сообщение для Youngflasher Найти все сообщения от Youngflasher
  № 8  
Ответить с цитированием
Youngflasher

Регистрация: Jan 2014
Сообщений: 27
Код AS3:
[RemoteClass] // создаю класс с метатегом  RemoteClass
public class Result 
{
    public function Result(){} 
}
....
public function writeData(object:Object):void // функция для записи в файл
{
	var file:File = File.desktopDirectory.resolvePath("data.txt");
	if (file.exists)
		file.deleteFile();
 
	var fileStream:FileStream = new FileStream();
	fileStream.open(file, FileMode.WRITE);
	fileStream.writeObject(object);
	fileStream.close();
}
public function readData():Object // функция для чтения из файла
{
	var file:File = File.desktopDirectory.resolvePath("data.txt");
	if(!file.exists) 
		return 0;
	var fileStream:FileStream = new FileStream();
 
	fileStream.open(file, FileMode.READ);
	var obj:Object = fileStream.readObject();
	fileStream.close();
	return obj;
}
....
public function initApplication():void // функция при инициализации приложения 
{
    writeData(new Result()); // записываю объект класса в файл.
    var result:Result = readData() as Result; //создаю объект своего класса и инициализирую его данными из файла.
 
    var array:ArrayCollection = new ArrayCollection(); // создаю коллекцию и наполняю ее объектами своего класса.
    array.addItem(new Result());
    array.addItem(new Result());
    array.addItem(new Result());
    writeData(array); // записываю коллекцию в файл.
    var arr:ArrayCollection = readData() as ArrayCollection; // инициализирую новую коллекцию коллекцией из файла.
    // Вот тут и проблема, возвращается коллекция наполнена  объектами типа Object.
    //Как сделать чтоб это были объекты моего класса?
 
    //такой вариант не подходит
    /*for each (var object:Object in arr) 
    {
        object = object as Result;
    }*/
}

Старый 22.09.2014, 18:43
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 9  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Разберитесь с registerClassAlias и учитесь гуглить, в сети навалом примеров на ваш случай, привожу только первый попавшийся

Добавлено через 2 минуты
и еще не понял зачем для вашего случая метатег [RemoteClass]? Он нужен для типизации объектов полученных с сервера по amf3, у вас этого вроде не наблюдается.

Старый 22.09.2014, 20:14
Youngflasher вне форума Посмотреть профиль Отправить личное сообщение для Youngflasher Найти все сообщения от Youngflasher
  № 10  
Ответить с цитированием
Youngflasher

Регистрация: Jan 2014
Сообщений: 27
Цитата:
Сообщение от PainKiller Посмотреть сообщение
Разберитесь с registerClassAlias и учитесь гуглить, в сети навалом примеров на ваш случай, привожу только первый попавшийся

Добавлено через 2 минуты
и еще не понял зачем для вашего случая метатег [RemoteClass]? Он нужен для типизации объектов полученных с сервера по amf3, у вас этого вроде не наблюдается.
Спасибо, разобрался.
Работает как с RegisterClassAlias так и с [RemoteClass].
В программе будет работа с сервером.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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