Newbie-Frage: Wie Button mit Carbon verbinden ?

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von Flupp, 25.03.2005.

  1. Flupp

    Flupp Thread Starter MacUser Mitglied

    Beiträge:
    1.709
    Zustimmungen:
    15
    MacUser seit:
    27.07.2004
    Entschuldigt die simple Frage, aber ich habe den Dreh noch nicht raus.

    Ich übe gerade an einer vom Button ausgelösten Messagebox:
    Die main.m ist leer und im MainMenu.nib habe ich einen Button platziert.

    Wie weiter (wie baue ich den Button ins main.m ein) ?

    Was mache ich nun, damit wenn der Button geklickt wird, eine kleine Box sich öffnet und scheibt "Hallo" ?
     
  2. -Nuke-

    -Nuke- MacUser Mitglied

    Beiträge:
    2.135
    Zustimmungen:
    15
    MacUser seit:
    13.09.2003
    Ich nehme mal an du meinst Cocoa und nicht Carbon. Denn main.m und .nib sagt aus das du Cocoa benutzt. ;)

    OK. Ist nicht ganz so leicht für Anfänger zu verstehen. Cocoa arbeitet strikt nach dem Model-View-Controller-Prinzip. D.h. ein Schalter ruft dann nur eine Methode auf, und ist nicht selbst die Methode, wie es z.B. in Borland C++ oder Delphi so ist.

    Gute Anlaufstellen sind:

    http://www.osxentwicklerforum.de
    und
    http://www.macentwicklerwelt.net

    Aber nun zu deinem Problem:

    - Schalter platzieren
    - Auf Tab Classes wechslen
    - NSObject anklicken
    - Enter drücken
    - Name vergeben (z.B. MyController)
    - Info Fenster aufrufen (Tools->ShowInfo)
    - MyController anklicken
    - Im Info-Fenster im Tab "Action" auf Add klicken
    - der Methode einen Namen geben, wie z.B. "showHello"
    - Jetzt auf den Menüpunkt (obere Leiste) "Classes" gehen und dann "Create Files for MyController"
    - jetzt noch mal MyController im Tab Classes anwählen (falls es nicht ist)
    - danach noch mal auf Menüpunkt "Classes" und sagen "Instantiate MyController"
    - Jetzt den Schalter im Fenster anklicken, "Strg"-Taste gedrückt haltenm klicken und mit der Maus auf den blauen Würfel im Tab "Instances" ziehen.
    - "showHello auswählen und auf den Schalter "Connect" klicken
    - speichern
    - Interface Builder beenden

    - In Xcode mal kurz zwischen den Ordnern klicken, damit die Dateiliste aktualisiert wird
    - MyController.m auswählen
    - in die Methode "showHello" z.B. sowas schreiben:

    Code:
    NSAlert *msg = [NSAlert alertWithMessageText:@"Hallo" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"Ein Schalter sagt Hallo"];
    [msg runModal];
    
    NSAlert gibt es aber erst seit OS X 10.3. Falls du 10.2 hast, geht das nicht. ;)
     
    Zuletzt bearbeitet: 25.03.2005
  3. Flupp

    Flupp Thread Starter MacUser Mitglied

    Beiträge:
    1.709
    Zustimmungen:
    15
    MacUser seit:
    27.07.2004
    Vielen Dank für die tolle Anleitung !

    Aber Verglichen mit Delphi (ich habe nicht damit angefangen) ist es gar nicht "Apple-like".
    Ich meine es ist weder einfach und schon gar nicht intuitiv.
    Im Gegenteil es ist aufwendig und sehr Fehleranfällig !
    ( Wer hat sich so eine umständliche Konstruktion ausgedacht, Pat & Mat ? )

    All die Definitionen und Deklarationen und das Interface (myController) muss ich selber machen, wofür habe ich dann einen Computer...

    Nicht mal den Currency Converter habe ich nach Anleitung hingekriegt, irgendwas kleines fehlt, aber der Compiler läuft ohne Probleme durch. Den Fehler finde ich nie, und damit ein grosses Projekt machen, no way!

    Ist das nur ein falscher Eindruck oder ist das wirklich so ?
     
  4. Saski

    Saski MacUser Mitglied

    Beiträge:
    650
    Zustimmungen:
    0
    MacUser seit:
    06.02.2005
    Das Ding ist sehr wohl Apple-Like. Die erzeugten Programme sind schließlich ziemlich effizient, und du kannst du Userinterface per Maus designen. Im Prinzip ist das GUI-Design genau wie bei Delphi: du erzeugst die Elemente, stellst die Eigenschaften ein, und fügst Aktionen hinzu, in denen du deinen Code schreibst ;)
     
  5. -Nuke-

    -Nuke- MacUser Mitglied

    Beiträge:
    2.135
    Zustimmungen:
    15
    MacUser seit:
    13.09.2003
    Klingt jetzt vielleicht doof, aber:

    Du musst hier in anderen Dimensionen denken. Klar ist es für den Delphi-Programmierer ne Qual, der Umstieg. Ich kenn das. Ich bin/war was ähnliches. ;)

    Cocoa ist strikt MVC. Model-View-Controller. DAS muss einem erst mal klar werden. Dann hat man schon 50% hinter sich. ;) In kurz (und ungenau): Oberfläche, Daten und "Quellcode" sind von einander getrennt.

    Mal ehrlich. Dein "Test-Programm" kommt im normalen Umfeld doch gar nicht vor. Darum ist es auch so "schwer".

    Du musst jetzt das MVC-Prinzip verstehen. Dazu mehr bei MacEntwicklerWelt.net.

    Was machst du in diesem Beispiel? Ist eigentlich ganz einfach. Du fügst dem Controller eine Methode hinzu. Dann sagst du dem Schalter er solle diese Methode aufrufen. Fertig. Du kannst jetzt aber auch andere Schalter und Menü-Punkte mit dieser Funktion verbinden. Die machen dann Haar genau das gleiche.

    In Delphi kann man ähnlich Programmieren. Nur ist das da ein Beinbruch. ;)

    Wenn du dahinter gekommen bist, wirst du merken das Cocoa einen Haufen Entwicklungs-Zeit spart, gegenüber Delphi.

    Bindings usw. sind noch ganz andere Geschichten. Schon gewusst, das du durch die Fähigkeiten von Cocoa und Nutzung des WebKits einen simplen WebBrowser Programmieren kannst OHNE AUCH NUR EINE ZEILE CODE zu schreiben?

    Das nur mal als Beispiel.
     
    Zuletzt bearbeitet: 26.03.2005
  6. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.040
    Zustimmungen:
    1.316
    MacUser seit:
    13.09.2004
    Naja, das mit dem Webbrowser geht bei Borlands C++ Builder auch ;)
    Aber in der Tat ist Cocoa deutlich eleganter. Leider ist der Weg dahin sehr lang um das alles zu verstehen. Mir gebricht es immer wieder schlicht an Zeit dazu. Der Hillegass ist jedoch ein super Buch, um das alles zu lernen und anzuwenden! Den kann ich besten gewissens empfehlen (obwohl ich erst die ersten 100 Seiten geschafft hab). Kann man den Tag irgendwo auf 26 Stunden erweitern lassen?
     
  7. -Nuke-

    -Nuke- MacUser Mitglied

    Beiträge:
    2.135
    Zustimmungen:
    15
    MacUser seit:
    13.09.2003
    Ziehe auf den Mars. Da hat der Tag, glaube ich, über 40 Stunden. ;)

    Das mit dem C++ Builder ist mir nicht bekannt (ich kenne nur die ActiveX-IE-Komponente, da schriebt man aber Code). Fragt sich nur, ob einem der C++-Builder die Zeilen Code schreibt, oder ob es nach dem selben Prinzip läuft.

    Würde mich mal Interessieren.

    Denn der Sinn hinter diesem Prinzip ist ja die Fehlervermeidung. D.h. findet Apple später irgend einen Fehler in diesem Ablauf, so beheben sie diesen und alle Anwendungen haben den Fehler auch nicht mehr.
    Bei kompilieren Code ist das ja nicht so.
     
  8. Flupp

    Flupp Thread Starter MacUser Mitglied

    Beiträge:
    1.709
    Zustimmungen:
    15
    MacUser seit:
    27.07.2004
    Sodele, ich habe es fast so hingekriegt wie es soll.
    Sobald man die Idee dahinter verstanden hat gehts, aber bei den Apple Dokumenten gibts wohl eine Lücke zwischen "Ohne Vorkenntnisse" und "Profi" ;)


    Habe doch noch Fragen (scheinen wohl zu primitiv zu sein für's osxentwicklerforum.de :eek: )

    1) Die Tabulator-Reihenfolge kann ich nicht ändern. Mit jedem Betätigen der Tabulatortaste springt er von oben nach unten und beginnt wieder oben. Ich möchte aber, dass er nicht wieder an den Anfang springt sondern zum Wertfeld.
    Die Vorgabe "nextKeyView" wird ignoriert ?

    2) main.m bleibt leer und unberührt, warum den das, sollte da nicht wenigstens irgendwas aufgerufen werden ?

    3) Eine Funktion wird nicht mal ausgeführt, gibt aber keinen Compilerfehler sondern nur ein falsches Resultat:

    ----
    ConverterController.m:

    #import "ConverterController.h"
    #import "Converter.h"

    @implementation ConverterController
    - (IBAction)convert: (id)sender
    {
    float rate, amt, total;
    ...
    total = [converter convertAmount:amt atRate:rate];
    ...
    }
    @end

    ----
    Converter.m:

    #import "Converter.h"

    @implementation Converter
    - (float)convertAmount: (float)amt atRate: (float)rate
    {
    return (amt * rate);
    }
    @end
    ----
    (Ich habe ein Leerzeichen zw. : und ( machen müssen, sonst gibts ein Smiliy )

    Was stimmt hier nicht ?
    Müsste ...=[converter convertAmount... nicht gross geschrieben sein =[Converter - genau wie Converter.m ? kopfkratz
     
  9. -Nuke-

    -Nuke- MacUser Mitglied

    Beiträge:
    2.135
    Zustimmungen:
    15
    MacUser seit:
    13.09.2003

    1. Sorry, kA.

    2. Also in main.m sollte zumindest die Standard int main(...) mit dem Inhalt [NSApplication run] oder so stehen. Das macht Xcode aber automatisch. Sollte aber trotzdem drinnen stehen.

    3. Also irgendwie verstehe ich den Sinn hinter dem nicht. ;) Außerdem fehlen noch die .h-Dateien. Die sind auch wichtig.
    Hast du denn schon ein Objekt von der Klasse "Converter" angelegt? Also Converter *converter = [[Converter alloc] init]? z.B.?

    edit:
    Achja. In Objecvtive-C gibt es meist nur Warnung, statt Compiler-Fehler. Diese Warnungen sind meist die "Fehler". ;)
     
    Zuletzt bearbeitet: 30.03.2005
Die Seite wird geladen...

Diese Seite empfehlen