AS 3 --> Callback-Fkt. und Null-Pointer ?

Skid

Erfahrenes Mitglied
Hallöchen,

ich arbeite derzeit an einer Art Gallery, welche einfach nur Bilder darstellen soll.
Jedoch komme ich gerade nicht weiter und ich bin mir jetzt nicht sicher, ob ich gerade den Wald vor lauter Bäumen nicht mehr sehe, oder ob es irgendein anderes Problem gibt, welches ich noch nicht kenne.

Jedenfalls zum Programm.
Es gibt zwei Klassen
  • cGALLERY (= Mainklasse)
  • cXMLLOADER (= Loaderklasse, welche eine XML laden soll mit den Pfaden der Bilder)
Das läuft nun ungefähr so ab
Code:
public function cGALLERY()
{
	// Parameter hier Dateiname + Pfad
	gLoader	= new cXMLLOADER("pictures.xml", "./");

	// Parameter entspricht hier einer Callback-Methode
	gLoader.loadXML(getImages());
}

public function getImages()
{
	// Holt sich das Array mit Dateinamen und Namen des Bildes aus Loader
	var tImageArray:Array = gLoader.getFileArray();

	// HIER ist das Problem, Ausgabe: NULL
	// Obwohl ein Zweidimensionales Array erwartet wird
	trace(tImageArray);
}

Innerhalb der Loaderklasse wird im Konstruktor der Dateiname und der Dateipfad gesetzt. Die Funktion getImages (welche als Paramter übergeben wird an loadXML) wird in eine Callback Variable gespeichert.

Siehe hier:
Code:
public functon loadXML(pCallback:Function):void
{
	this.gCallback = pCallback;
	this.prepareLoading();
}

In der Funktion prepareLoading() wird ein URLLoader angelegt und für diesen der EventListener Event.COMPLETE (wenn fertig geladen). Anschließend wird die Funktion parseXML aufgerufen, nachdem die Datei mit dem zugehörigen Pfad gelesen worden ist.

In der Funktion parseXML wird ein XML-Objekt erzeugt und aus dem Event-Objekt werden alle gelesenen Informationen bezogen.
Anschließend werden zwei globale Arrays gesetzt (für Dateinamen + Bildnamen) mittels New-Operator.
Dann werden alle Informationen in diesen mittels For-Schleife gespeichert.
Nach der Schleife wird die Callback-Funktion aufgerufen, jedoch wird in dieser Funktion, durch die Funktion getFileArray, ein Array zurückgegeben, welches aus null zeigt.

In der Funktion parseXML gibt es keine Fehler, alles wird korrekt eingelesen und gespeichert innerhalb der Arrays, die Callback-Funktion wird auch aufgerufen, sonst würde der Fehler nicht kommen.

Die Funktion getFileArray sieht so aus:
Code:
public function getFileArray():Array
{
	return new Array(this.gFileContainer, this.gNameContainer);
}

Wenn ich jetzt bspw. in der Funktion getImages (da wo der Fehler auftritt) auf die Arrays zugreifen möchte, dann bekomme ich nur den Fehler ...
Code:
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.
	at script.main::cGALLERY/getImages()
...angezeigt.

Hat evtl. jemand eine Idee ?
Übersehe ich etwas ?

Kann es sein, dass der Code, nach der Callbackfunktion, schon geladen sein muss ?
Das wäre mir jedoch neu, somit würde der Callbackfunktion unnütz werden ...

Beste Grüße und Danke,
SkiD.
 
Also ich habe das Problem gefunden, bin mir jedoch nicht sicher, warum es so funktioniert und anders nicht.

Im Code stand vorher die Übergabe and die Funktion loadXML:
Code:
gLoader.loadXML(getImages());

Ich habe den Ausdruck ersetzt durch folgendes:
Code:
gLoader.loadXML(function(){getImages();});

Ich weiss, dass letzteres richtiger ist, jedoch glaube ich, dass es wie oben genannt ebenfalls gehen sollte.

Liege ich da falsch ?
Wenn ja warum ?

Grüße,
SkiD.
 
Zuletzt bearbeitet:
getImages() gibt auch nichts zurück, du hast also im Endeffekt da stehen

Code:
getImages();
gLoader.loadXML();

Wieso das auf einmal mit einem function(){} drum herum funktioniert ist mir äußerst schleierhaft, außer du hast noch etwas an der getImages-Funktion geändert...?
 
Zurück