Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-02-2011, 18:12   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 37
Vorhandensein eines Objektes prüfen...

Kann gut sein, dass ich gerade den Wald vor Bäumen nicht mehr sehe,… AAaaaaber ich habe folgendes Problem:

Ich habe ein value object A, welches ein weiteres value object B enthält

Code:
objectA.objectB
Nun möchte ich in einer Komponente eine Fallunterscheidung machen, die sich danach richtet, ob bereits ein objectB existiert (bzw zugeordnet wurde) oder nicht.

Ich habe also total blauäugig folgende Prüfung durchgeführt:

Code:
if(objectA.objectB != null)
Und hier knallt es auch gleich:

Code:
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.
If(objectA.objectB) habe ich auch noch probiert,… sonst habe ich aber keine zündende Idee mehr…

Kann mit da eventuell jemand aus der Patsche helfen?
Jarell ist offline   Mit Zitat antworten
Alt 01-02-2011, 18:34   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Der Fehler tritt bereits in der if-Bedingung auf, weil bereits das erste Objekt nicht existiert. Du solltest deshalb jedes Objekt einzeln prüfen:
PHP-Code:
if(objectA && objectA.objectB){
   
//...

__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 02-02-2011, 09:42   #3 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
u.U. auch
if (objectA && objectA!=null && objectA.objectB){..

und natürlich
try {
} catch..

möglich: die variable objectA wäre vorhanden, besitzt aber kein objectB. damit greifst du auch auf etwas zu, das es garnicht gibt.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 02-02-2011, 09:53   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Zitat:
Zitat von hgseib Beitrag anzeigen
if (objectA && objectA!=null [...]
Warum das? IMHO ist das doppelt gemoppelt: Wenn objectA==null ist, wäre auch Boolean(objectA)==false?!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 02-02-2011, 11:21   #5 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 37
@ Martin Kraft

Danke für den Hinweis! Daran hat es tatsächlich gelegen. Habe die Komponente im Testbetrieb versucht zu starten und dabei vergessen das result-object zuzuweisen.

... den Wald vor Bäumen und so... ^^
Jarell ist offline   Mit Zitat antworten
Alt 02-02-2011, 12:13   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
Zitat:
Zitat von Martin Kraft Beitrag anzeigen
Warum das?
hatte schon mehrmals den fall, das die browser fehler melden, die in flash niemals geworfen werden. da hat ein zusätzlicher test auf null immer geholfen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 04-02-2011, 07:59   #7 (permalink)
Neuer User
 
Registriert seit: Oct 2008
Beiträge: 148
hi
Zitat:
und natürlich
try {
} catch..
die verwendung von try/catch ist in meinen augen nur das umgehen von unsauberer programmierung. eine try/catch ist eine zuviel...

ich würde den vorschlag von martin kraft vorziehen...
sytch ist offline   Mit Zitat antworten
Alt 04-02-2011, 09:14   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
ja, vielleicht
schon der titel: 'Vorhandensein eines Objektes prüfen...' lässt auf unsauberes programmieren schliessen. weil: wer kennt da seine eigenen objekte nicht? aber, es gibt nunmal solche situationen.

und warum nur gibt es dann überhaupt try/catch ?
alles hat irgendwo seine berechtigung. und gerade in catch kann man sich dinge anzeigen lassen, wenn etwas nicht so ist wie es sein soll. also ja: besonders in der entwicklungsphase geeignet.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 04-02-2011, 11:29   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.142
@H.G.: Nicht jedes Objekt ist zwangsläufig zu initialisiert, dass alle Properties schon Werte besitzen oder andere Object referenzieren (sie werden lazy gebaut).

try {} catch {} sind ja dann doch eher für "richtige" Ausnahmen gedacht wie zum Beispiel fehlgeschlagene IO Operationen. try { } catch {} ist in ActionScript imo aber auch eher das größte Geschütz, da vieles über ErrorEvents verarbeitet werden kann und auch sollte, da alles asynchron ist.

Da in Flex vieles, obwohl asynchron, durch eine synchron wirkende Facade versteckt wird, sind null Checks die saubere Variante. Das ganze mal illustriert an folgendem Beispiel und gerade in der UI Entwicklung können die Modelle/Daten für die Views auch leer sein:
Code:
package fs.components
{
    import mx.core.IDataRenderer;
    import mx.core.UIComponent;

    public class Component extends UIComponent implements IDataRenderer
    {

        private var _data:Object;

        private var _dataChanged:Boolean;

        public function get data():Object
        {
            return _data;
        }

        public function set data(value:Object):void
        {
            if (_data === value)
            {
                return;
            }
            _data = value;
            _dataChanged = true;
            invalidateProperties();
            invalidateSize();
            invalidateDisplayList();
        }

        public function Component()
        {
        }

        override protected function commitProperties():void
        {
            super.commitProperties();

            if (_dataChanged)
            {
                if (_data)
                {
                    // process data
                }
                else
                {
                    // process null
                }
            }
        }
    }
}
Man sollte sich halt darüber im Klaren sein, welche Verantwortlichkeiten ein Objekt hat und wann der Zustand als valide gilt und wann nicht.
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Prüfen ob Instanz eines Objektes existiert tobyff ActionScript 2 3 08-07-2007 21:17
Mehrfachumrandung eines Objektes???? blancbone Flash MX 3 08-08-2003 19:02
Position eines Objektes tobisemmet Flash MX 2 30-10-2002 09:53
name eines Objektes herausfinden netTrek Softwarearchitektur und Entwurfsmuster 35 30-08-2002 08:57
hintergrund eines objektes tupasH Flash 4 und Flash 5 5 25-05-2002 00:13


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele