Original von rml
In der spezialisierten Klasse Auto könnte es z.B. eine Methode oeffneFahrerTuer geben, welche in der spezialisierten Klasse Motorrad natürlich keinen Sinn mach, wenn man mal von einem Standard Motorrad ohne Türen ausgeht. Ich würde daher nie auf die Idee kommen die Methode oeffneFahrerTuer in der gemeinsamen Basisklasse zu definieren, da man diese Methode in der Spezialisierung für Motorad einfach nicht benötigt. Diese Methode hätte dort keinen Inhalt ausser vielleicht eine Fehlermeldung zu produzieren, dass dieses Motorad keine Fahrertür hat.
genau das ist wohl das problem.
da ich aber von id besser keinen gebrauch machen sollte, wie ich hier höre, hab ich eine "dirty" variante genommen, die mir zwar üerhaupt nicht gefällt, aber scheinbar die einzige lösung zu sein scheint.
ich habe in die containerklasse zeiger von allen klassen, die es gibt eingefügt und einen wert, der anzeigt, welchen inhalt dieser container nun hat.
ich frage diesen wert ab und weiss, dass nur der entsprechende zeiger/referenz belegt ist und alle aneren 0.
leider scheint es wohl tatsächlich nicht anders zu gehen

Natürlich geht es auch anders. Dass habe ich ja schon hier beschrieben.
Original von MCDan
Damit der Compiler keine Warnungen mehr ausspuckt hilft nur eine Typumwandlung (cast) auf die spezialisiert Klasse, also hier z.B. auf Auto, oder die Änderung der Referenzierung, also die Verwendung einer Referenz auf die Klasse Auto.
Konket würde dies dann in etwa so aussehen.
Quellcode
- - (void)meineVerarbeitungsmethode
- {
- if ([referenz isKindOfClass:[Auto class]])
- {
- Autoklasse *autoReferenz = (Auto *)referenz;
- // Du kannst jetzt alle Methoden der Autoklasse ohne Warnings beim Compile verwenden, also z.B.
- [autoReferenz oeffenFahrerTuer];
- // alternativ kannst Du Dir die "Zwischenreferenz" sparen und z.B.
- [(Auto *)referenz oeffneFahrerTuer]; // verwenden
- }
- else if ([referenz isKindOfClass:[Motorrad class]])
- {
- // wie oben...
- }
- else if ... // für alle weiteren Klassen
- }
Was machst Du genau in der Verarbeitung, dass diese zwar gleich, also über den Aufruf der selben Methode in MCVContainer getriggert wird, jedoch jede Klasse dann unterschiedlich verarbeitet wird?
