Flashhilfe.de - Flash Community

Type Coercion failed: cannot convert... [AIR 2]

 


AntwortenRegistrieren Seite1  

Kerstin77#1
Benutzerbild von Kerstin77
Beiträge: 1004
Registriert: Jul 2008

16.11.2012, 17:06

Hallo,

in einer AIR-Anwendung lade ich aus dem applicationStorageDirectory eine swf nach und füge EventListener für eigene Events hinzu:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private function loadStartdatei():void {
     var urlstring:String = appStoreDir.nativePath + "\\start.swf";      
     var loadContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
     swfLoader = new Loader();
     swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, showStartdatei);
     swfLoader.load(new URLRequest(urlstring), loadContext);
}

private function showStartdatei(evt:Event):void {
     swfLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, showStartdatei);
     this.start_swf = MovieClip(this.swfLoader.content);
     this.start_swf.x = 0;
     this.start_swf.y = 0;
     this.start_swf.addEventListener(Event.ADDED_TO_STAGE, setupStartdatei);
     this.addChild(this.start_swf);
}

private function setupStartdatei(evt:Event):void {
     this.start_swf.addEventListener(ResultEvent.SAVE_RESULTS, saveResults);
     this.start_swf.addEventListener(ArrowEvent.SHOW_PROGRESS, updateArrow);
     start_swf.swfReady(this.result_arr);
}


In der externen Datei wird das Event wie folgt aufgerufen:
ActionScript:
1this.dispatchEvent(new ArrowEvent(ArrowEvent.SHOW_PROGRESS, completedModules, anzahlModule));


Dann kommt folgende Fehlermeldung:
TypeError: Error #1034: Type Coercion failed: cannot convert ArrowEvent@51f1ee1 to ArrowEvent.

Das ArrowEvent:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package {
     import flash.events.*;
     public class ArrowEvent extends Event {
        public static const SHOW_PROGRESS:String = "showProgress";
        private var _index:uint;
        private var _anzahl:uint;
        public function ArrowEvent(type:String, index:uint, anzahl:uint, bubbles:Boolean=false, cancelable:Boolean=false) {
           super(type, bubbles, cancelable);
           this._index = index;
           this._anzahl = anzahl;
        }
        public function get index():uint {
           return this._index;
        }
        public function get anzahl():uint {
           return this._anzahl;
        }
     }
}


Was läuft da falsch? Liegt die start.swf im selben Ordner wie die Hauptdatei, funktioniert es reibungslos.

Grüße,
Kerstin
Wer Rechtschreibfehler findet, darf sie gerne behalten.
Geändert von Kerstin77 am 16.11.12 um 17:08 Uhr
Werbung
Beiträge: 0
Registriert: Feb 2016


Sebastian#2
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

17.11.2012, 12:30

Hallo Kerstin,

dachte gerade, klarer Fall von LoaderContext, aber das hast du ja bereits bedacht.
Was bei Dir der Fall sein wird ist das Du die ArrowEvent Klasse in beiden Applikationen einkompiliert hast. Deswegen erkennt er sie wahrscheinlich als zwei verschiedene. - ist ja auch klar wenn Du die die Klasse in der einen Anwendung änderst aber die andere Anwendung nicht neu kompilierst. Dann hast Du zwei verschiedene Versionen.

Aufgrund dessen und Dateigröße sowie weitere Vorteile, sollte das Projekt so angelegt sein das Du eine gemeinsame Library hast die die beiden Applikationen nutzen. Über die Kompiler Settings kannst Du dann angeben das in Deinem Module die Klassen aus der Lib nicht mit einkompiliert aber genutzt werden soll.

Die swf solltest Du dann mit dem ModuleLoader laden.

Ich hoffe das hilft Dir so grob weiter und löst auch das Problem.

Grüße,
Sebastian
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
Kerstin77#3
Benutzerbild von Kerstin77
Beiträge: 1004
Registriert: Jul 2008

Themenautor/in

19.11.2012, 11:19

Hi Sebastian,

Danke für die Antwort, aber vielleicht habe ich Dich nicht ganz verstanden: zur Entwicklung liegen alle Dateien im selben Ordner.

Projektordner
   - Main.fla (AIR, Hauptdatei)
   - Start.fla (AS3, Datei soll aus dem ApplicationStorageDirectory geladen)
   - ArrowEvent.as

Ich habe also nur ein ArrowEvent. Zunächst exportiere ich die Start.fla, verschiebe die Start.swf in das ApplicationStorageDirectory und kompiliere dann die Main.fla - lade ich die Start.swf aus dem Entwicklungsordner ist alles ok. Die Fehlermeldung kommt erst, wenn ich die Start.swf aus dem anderen Verzeichnis lade.

Und der ModuleLoader ist doch nur für Flex verfügbar, oder?

Grüße,
Kerstin
Wer Rechtschreibfehler findet, darf sie gerne behalten.
Geändert von Kerstin77 am 19.11.12 um 11:20 Uhr
Sebastian#4
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

19.11.2012, 11:37

Hallo Kerstin,

da sieht man mal wieder wie verwirrend unsere Forumnamen sind ;)
Ich bin von einem Flex Projekt ausgegangen das Du als AIR kompilierst.

Mit der Flash IDE habe ich das noch nie gemacht weswegen ich Dir da leider nicht weiterhelfen kann.
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
Werbung
Beiträge: 0
Registriert: Feb 2016


Kerstin77#5
Benutzerbild von Kerstin77
Beiträge: 1004
Registriert: Jul 2008

Themenautor/in

19.11.2012, 13:11

oh shit...

Habe das Projekt mal als minimalistische Testversion im Anhang, vielleicht hast Du noch eine Idee?

Grüße
Kerstin
Wer Rechtschreibfehler findet, darf sie gerne behalten.

Angehängte Dateien:
Komprimierte Datei Testaufbau.zip19.22 KB

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de