titel von verschiedenen Buttons ändern mit Hilfe von Tags

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

  • Wie war das mit der Eleganz?
    Wenn du zur Prüfung des TicTacToe Spieles alle Lösungen abfragen willst, dann musst du wohl alle 8 möglichen Lösungen überprüfen. Dazu 3 Stringvergleiche pro Test und das mal zwei um für Spieler 1 und 2 zu testen... ergibt 48 Stringvergleiche die in 3er Gruppen UND und dann ODER verknüpft werden. Sorry... aber das riecht nach Fehlern und sieht als Code alles andere als elegant aus. Das sei dir aber im ersten Semester verziehen, aber vielleicht habe ich auch ein falsches Bild vom Studiengang "angewandte Informatik" - ich habe ja nie Informatik studiert, nur angewendet.

    Wie ist das mit MVC?
    Schon vom "Modell-View-Controller" Paradigma in ObjC/Cocoa gehört? Da wird klar definiert: niemals einen View als Speicher für Informationen nutzen. Ob in dem Feld ein X oder ein O steht, gehört in ein Modell - und das könnte ganz einfach ein int felder[9] oder vielleicht auch ein int felder[3][3] in einer Modell-Klasse sein. Der ViewController vermittelt nur zwischen Modell und View. Die Buttons rufen die IBAction auf und je nachdem welcher Button gedrückt wurde und ruft eine Methode in der Modell-Klasse auf. Um die Buttons neu zu malen (was nicht immer für alle notwendig ist) kann man auch die Klasse aufrufen, um eben entweder " ", "X" oder "O" in den currentTitle zu schreiben.

    Der Test, ob ein Spieler gewonnen hat, gehört demnach auch in die Modell-Klasse und dort kannst du einfach die Elemente des int-Arrays vergleichen (was auch schneller geht). Auch diese Tests gehen noch eleganter, wenn man sich vorher eine gute Darstellung des TicTacToe Feldes überlegt hat. Manchmal eine Stunde nachdenken, am besten weit weg vom Computer, und erst dann anfangen, Code zu schreiben, ist oft viel besser. Ich habe mir zumindest schon viele Tage Code-Tippen gespart, indem ich den einen oder anderen Tag nicht einen Buchstaben getippt habe.

    Als weitere Anregung:
    Wenn du MVC richtig anwendest, dann hast du noch zwei weitere Vorteile:
    1. du kannst dein Modell erweitern ohne dich erstmal um den View zu kümmern, zum Beispiel um eine KI als Gegenspieler zu implementieren. Die KI-Züge darzustellen lässt sich dann über einen "Callback" in den ViewController implementieren, wenn man es richtig machen will, per Protocol.
    2. du kannst Unit-Tests schreiben, die die komplette Spiellogik testen kann. Im Moment musst du, um alle Varianten zu testen, alle 16 Lösungen durchspielen. Das geht per Code schneller jedes Mal zu testen, als jedes Mal alle 16 Lösungen und die übrigen Unentschieden (wegen false-positives) durch zu spielen.

    Vielleicht erscheint das jetzt als "mit Kanonen auf Spatzen schießen" und "Klugschei***ei". Aber wenn man Informatik studiert, dann sollte man früh anfangen es richtig zu machen. Die Aufgaben werden nicht immer so überschaubar sein. Im Berufsleben später erst recht nicht.
  • Zu dem Problem mit deinem Code:

    Was ist "testButton"? Laut Header ein UIButton*, der aber mit keinem Element der GUI verknüpft ist - sonst müsste das ja ein IBOutlet sein. testButton wird auch nicht gesetzt ist also nach ObjC-Spezifikation nil. Du schickst dann eine Nachricht an ein nil-Objekt, was durchaus möglich ist. Sei froh, dass du da nil zurückbekommst, das ist nämlich nicht definiert. Der Reset sollte dann auch nicht funktionieren.

    Es geht also nicht um einen testButton (das soll wohl einer der Buttons sein), da der keine SubViews hat, also kann auch kein viewWithTag unter den SubViews gefunden werden. Ersetze doch mal testButton mit self.view. Die Buttons sind SubViews des self.view, können also nur so per Tag gefunden werden. Dann findest du die Buttons, kannst sie zurücksetzen und bekommst auch den currentTitle. Der Test sollte dann auch funktionieren.

    Aber bitte beachte meinen vorherigen Beitrag, lies die die Conceptional-Dokumente von Apple durch. Vielleicht hilft es, das auch mal dem Dozenten zu sagen. Es kommt mir eher wie ein "Lockangebot" vor, wenn eine Uni oder FH im ersten Semester iOS-Development anbietet. Schnell eine Vorlesung zusammen klopfen und durch, Hauptsache 100 Studenten mehr - gibt mehr Budget. Muss sein - muss aber nicht gut sein.
  • ssb schrieb:

    Wie ist das mit MVC?
    Schon vom "Modell-View-Controller" Paradigma in ObjC/Cocoa gehört?
    ne...das ist mir vollkommen unbekannt...

    ssb schrieb:

    Manchmal eine Stunde nachdenken, am besten weit weg vom Computer, und erst dann anfangen, Code zu schreiben, ist oft viel besser. Ich habe mir zumindest schon viele Tage Code-Tippen gespart, indem ich den einen oder anderen Tag nicht einen Buchstaben getippt habe.
    Das werd ich mir auf jeden Fall annehmen müssen...früher in der Schule wurde uns das glaub ich auch mal so beigebracht :)
    heute war auch die Auflösung der Aufgabe...und zwar wurden die Button in ein MutableArray gepackt und dann wurde auf die mit "ObjectAtIndex" zugegriffen...joa... :)

    ssb schrieb:

    Vielleicht erscheint das jetzt als "mit Kanonen auf Spatzen schießen" und "Klugschei***ei". Aber wenn man Informatik studiert, dann sollte man früh anfangen es richtig zu machen. Die Aufgaben werden nicht immer so überschaubar sein. Im Berufsleben später erst recht nicht.
    Absolut nicht...ich bin für jede Anregung und Kritik wirklich dankbar...und du hast schon recht dass man es von Anfang an richtig lernen sollte...neues zu lernen ist oft einfacher als falsch-Gelerntes zu berichtigen...

    ===============================================================================================================================================================================================

    ssb schrieb:

    Was ist "testButton"? Laut Header ein UIButton*, der aber mit keinem Element der GUI verknüpft ist - sonst müsste das ja ein IBOutlet sein. testButton wird auch nicht gesetzt ist also nach ObjC-Spezifikation nil. Du schickst dann eine Nachricht an ein nil-Objekt, was durchaus möglich ist. Sei froh, dass du da nil zurückbekommst, das ist nämlich nicht definiert. Der Reset sollte dann auch nicht funktionieren.
    richtig :D

    ssb schrieb:

    Vielleicht hilft es, das auch mal dem Dozenten zu sagen. Es kommt mir eher wie ein "Lockangebot" vor, wenn eine Uni oder FH im ersten Semester iOS-Development anbietet. Schnell eine Vorlesung zusammen klopfen und durch, Hauptsache 100 Studenten mehr - gibt mehr Budget. Muss sein - muss aber nicht gut sein.
    das glaub ich ehrlich gesagt nicht :) denn in unserem informatikkurs sind derzeit etwa 15 Studenten...davon studieren 6 oder 7 Informatik und die anderen NetworkComputing...
    also würde es sich dafür nciht wirklich lohnen...wobei die Übungen wirklich sprunghaft sind...
    heut sind wir wie unten erwähnt die TicTacToe Aufgabe durchgegangen und kurz danach gabs einen Themensprung zur MinimalMachine....also nix mehr mit ObjectiveC ...damit hatten wir vllt 3 Übungen...etwas traurig :(
    aber ich werde mir noch etwas ObjC-Lektüre suchen und anfangen zu versuchen das richtig zu lernen (so weit es für mich möglich ist) ;)

    ================================================================================================================================================================================================

    also ich werd nochmal versuchen die Fehler zu beheben und das Programm zum Laufen zu bringen ;)
    danke nochmal für die Gedult und die Vorschläge....