Entfernte Methodenaufrufe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Entfernte Methodenaufrufe

    Hallo Community,

    ich bin ein Umsteiger aus der Java und C# Welt und implementiere gerade mein erstes ObjC Project.
    Momentan stehe ich vor folgendem Problem:

    Meine Ai soll im Projekt in den Stufen Easy, Middle und Hard verfügbar sein. Ich habe ein Protocol erstellt (Ai.h), welches von den Klassen Ai_Easy, Ai_Middle und Ai_Hard implementiert wird. Da in der Stufe Middle und Hard die gleichen Mechanismen greifen sollen wie bei Easy dachte ich es wäre eine nette Idee den Quellcode auszulagern. Die tat ich in der Klasse Ai_Operations.h /.m

    Mein Ziel ist es den Methodenaufruf nach folgendem Schema zu realisieren:

    Klasse Easy:
    init {
    Methode 1 in Ai_Operations mit Übergabeparameter self
    Methode 2 in Ai_Operations mit Ubergabeparametern self, int wert1, int wert2
    }

    Klasse Middle:
    init {
    Methode 1 in Ai_Operations mit Übergabeparameter self
    Methode 3 in Ai_Operations
    ...
    }

    Klasse Ai_Operations:
    Methode1 {...}
    Methode2 {...}
    Methode3 {...}
    ...

    mein ObjC-Code:

    Quellcode

    1. // Aufruf in Klassen Easy,Middle & Hard nach Schema:
    2. // [Ai_Operations methode1:self paramVal:4];
    3. // Ai_Operations.m
    4. + (void) methode1: (id*) ai paramVal: (int) value {
    5. if (value != ai->value]) {
    6. switch (value) {
    7. case 1:
    8. [ai setVarA:0.04f];
    9. break;
    10. case 2:
    11. [ai setVarA:2.03f];
    12. [ai setVarB:@"HalloWelt"];
    13. break;
    14. default:
    15. [ai setVarA:0.0f];
    16. break;
    17. }
    18. }
    19. }
    Alles anzeigen




    Dummerweise wirft er mir ein Fehler bei Methodenaufrufen auf dem ai Objekt. Ich habe etwas recherchiert und bin auf das Konzept der Selections gestoßen, allerdings blicke ich da absolut nicht durch. Meine Frage also:

    - Wie mache ich einen Methodenaufruf auf dem übergebenen ai Objekt?

    Vielen Dank im Voraus und ich hoffe auf eure Hilfe
  • Du hast ai ja nur als (id) deklariert. Woher soll der Compiler also wissen was für ein Object das ist ? Entweder du castest es in der Methode auf die richtige Klasse, oder du deklarierst den Parameter in der Methode gleich entsprechend.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • RavenKN schrieb:

    Hallo Community,

    ich bin ein Umsteiger aus der Java und C# Welt und implementiere gerade mein erstes ObjC Project.
    Momentan stehe ich vor folgendem Problem:

    Meine Ai soll im Projekt in den Stufen Easy, Middle und Hard verfügbar sein. Ich habe ein Protocol erstellt (Ai.h), welches von den Klassen Ai_Easy, Ai_Middle und Ai_Hard implementiert wird. Da in der Stufe Middle und Hard die gleichen Mechanismen greifen sollen wie bei Easy dachte ich es wäre eine nette Idee den Quellcode auszulagern. Die tat ich in der Klasse Ai_Operations.h /.m

    Mein Ziel ist es den Methodenaufruf nach folgendem Schema zu realisieren:

    Klasse Easy:
    init {
    Methode 1 in Ai_Operations mit Übergabeparameter self
    Methode 2 in Ai_Operations mit Ubergabeparametern self, int wert1, int wert2
    }

    Klasse Middle:
    init {
    Methode 1 in Ai_Operations mit Übergabeparameter self
    Methode 3 in Ai_Operations
    ...
    }

    Klasse Ai_Operations:
    Methode1 {...}
    Methode2 {...}
    Methode3 {...}
    ...

    mein ObjC-Code:

    Quellcode

    1. // Aufruf in Klassen Easy,Middle & Hard nach Schema:
    2. // [Ai_Operations methode1:self paramVal:4];
    3. // Ai_Operations.m
    4. + (void) methode1: (id*) ai paramVal: (int) value {
    5. if (value != ai->value]) {
    6. switch (value) {
    7. case 1:
    8. [ai setVarA:0.04f];
    9. break;
    10. case 2:
    11. [ai setVarA:2.03f];
    12. [ai setVarB:@"HalloWelt"];
    13. break;
    14. default:
    15. [ai setVarA:0.0f];
    16. break;
    17. }
    18. }
    19. }
    Alles anzeigen




    Dummerweise wirft er mir ein Fehler bei Methodenaufrufen auf dem ai Objekt. Ich habe etwas recherchiert und bin auf das Konzept der Selections gestoßen, allerdings blicke ich da absolut nicht durch. Meine Frage also:

    - Wie mache ich einen Methodenaufruf auf dem übergebenen ai Objekt?

    Vielen Dank im Voraus und ich hoffe auf eure Hilfe


    Schau Dir mal die Antwort von 'ramo' an, id ist bereits ein Pointer.

    Unterklassen und Protokolle musst Du genau abwägen, Unterklassen sind einfacher zu erstellen, Protokolle genereller und werden anderen Objekten angefügt.

    Methoden solltest Du nach Ihren Funktionen mit Verben benennen, nachdem, was sie 'tun'.
    I would be embarrassed if they did not spy on me.