Já percebi onde está o erro mas continuo sem perceber porque é que
acontece.
O código do MyLogvent é o seguinte:
public class MyLogEvent extends Event
{
// Se usar esta string para o tipo de evento dá erro
//public static const CONTENT_LOG :String = "contentLog";
// Se usar esta já não dá erro...
public static const CONTENT_LOG :String = "myContentLog";
private var _text:String = "";
public function get text() : String
{
return this._text;
}
private var _logType:String = "";
public function get logType() : String
{
return this._logType;
}
public function MyLogEvent( type:String,
logType:String,
logText:String,
bubbles:Boolean=true,
cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this._logType = logType;
this._text = logText;
}
public override function clone():Event
{
return new MyLogEvent( this.type,
this._logType,
this._text,
this.bubbles,
this.cancelable);
}
}
O erro surge no handler de uma classe onde penduro um listener para o
evento MyLogEvent.CONTENT_EVENT. Se o MyLogEvent.CONTENT_EVENT for
igual a "contentLog" o erro surge. Se mudar o valor da constante para
"myContentLog" o erro desaparece.
Ponderei a hipótese de algures estar a ser disparado um outro evento
qualquer cujo tipo também fosse definido como "contentLog", fazendo
com que o handler se baralhasse com o tipo de evento que estava a
receber. Mas nem eu uso essa definição noutro tipo de evento nem há
outras classes que o usem (procurei na documentação da adobe e não
encontrei nada).
Enfim, não encontrei a solução mas caso isto aconteça a alguém, deixo
a sugestão: experimentem mudar o nome da constante que define o tipo
do evento.
On Jan 27, 3:03 pm, Carolina Torres <[email protected]> wrote:
> Experimentei essa solução mas acontece o mesmo...
>
> var context:LoaderContext = new LoaderContext(false,
> ApplicationDomain.currentDomain);
> // O método load só aceita um argumento por isso fiz a atribuição do
> loaderContext antes do load
> _swfLoader.loaderContext = context;
> _swfLoader.load(_contentURL);
>
> On Jan 26, 9:00 pm, Nuno Rosa <[email protected]> wrote:
>
>
>
> > Isso está relacionado com o ApplicationDomain.
> > Por defeito as definições contidas no swf que estás a carregar estão num
> > aplication domain diferente da app principal.
>
> > Se quiseres manter as mm definições em ambos, podes definir qual o contexto.
>
> > var context:LoaderContext = new LoaderContext(false,
> > ApplicationDomain.currentDomain);
> > loader.load(url,context);
>
> > 2010/1/26 Carolina Torres <[email protected]>
>
> > > Olá a todos.
>
> > > Numa aplicação AIR estou a tentar detectar eventos vindos de um swf
> > > que é carregado usando um SWFLoader mas surge-me o seguinte erro:
>
> > > TypeError: Error #1034: Type Coercion failed: cannot convert
> > > mylogev...@66c67c1 to MyLogEvent.
>
> > > Parece que ele está a comparar uma instância de MyLogEvent à própria
> > > classe MyLogEvent mas não percebo porquê...
> > > Aqui está o modo como faço load do swf e como lhe penduro o listener
> > > para o evento do tipo MyLogEvent:
>
> > > private function loadContent(url:String) : void
> > > {
> > > var loader:SWFLoader = new SWFLoader();
> > > loader.autoLoad = false;
> > > loader.loadForCompatibility = true;
>
> > > loader.addEventListener(IOErrorEvent.IO_ERROR,
> > > ioErrorSWFHandler);
>
> > > loader.addEventListener(Event.COMPLETE,
> > > loadSWFHandler);
> > > loader.load(url)
> > > }
>
> > > private function loadSWFHandler(event: Event): void
> > > {
> > > event.currentTarget.removeEventListener(event.type,
> > > arguments.callee);
>
> > > var loader:SWFLoader = SWFLoader(event.target);
> > > loader.soundTransform = new
> > > SoundTransform(this.soundVolume, 0);
>
> > > // Aqui penduro o listener no content do
> > > loader
>
> > > loader.content.addEventListener(MyLogEvent.CONTENT_LOG,
> > > onLogEvent);
> > > }
>
> > > private function onLogEvent(event:MyLogEvent) : void
> > > {
> > > // é aqui que tudo rebenta...
> > > trace("hello");
> > > }
>
> > > --
> > > Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
> > > Comunidade Portuguesa de Rich Internet Applications -www.riapt.org" dos
> > > Grupos do Google.
>
> > > Para publicar uma mensagem neste grupo, envie um e-mail para
> > > [email protected].
> > > Para anular a inscrição neste grupo, envie um e-mail para
> > > [email protected] <riapt%[email protected]>.
> > > Para ver mais opções, visite este grupo em
> > >http://groups.google.com/group/riapt?hl=pt-PT.
--
Recebeu esta mensagem porque está inscrito no grupo "Mailing List da Comunidade
Portuguesa de Rich Internet Applications - www.riapt.org" dos Grupos do Google.
Para publicar uma mensagem neste grupo, envie um e-mail para
[email protected].
Para anular a inscrição neste grupo, envie um e-mail para
[email protected].
Para ver mais opções, visite este grupo em
http://groups.google.com/group/riapt?hl=pt-PT.