Einstieg für Delphi-Programmierer/kompletten Neuling?

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von sECuRE, 28.06.2005.

  1. sECuRE

    sECuRE Thread Starter MacUser Mitglied

    Beiträge:
    566
    Zustimmungen:
    6
    MacUser seit:
    25.06.2005
    Hi,

    ich habe mir jetzt XCode von der Apple Homepage besorgt und trotz erst 3 Tagen Mac-Vergnügen würde ich gerne in's Programmieren einsteigen auf einem Mac. Ich kenn von Windows her Delphi, von Linux C++ (nur auf Kommandozeilenebene), insofern habe ich keine großen Schwierigkeiten mit dem Objective-C-Code. Was mir einiges an Kopfzerbrechen bereitet ist die XCode-IDE und das Denken hinter dem Interface Builder/dessen Komponenten.

    Wie ich eine "einfache" NSTableView mit Daten fülle über Sourcecode scheint schon ein sehr komplexes Thema zu sein. Unter Delphi ging das mit "ListView.Items.Add('test');", hier muss ich erst einen NSArrayController erstellen, den dann irgendwie mit Bindings und sonstwas anpassen, eigene Methoden zum Objektzurückgeben definieren... *bin total verwirrt*.

    Hat jemand da vielleicht eine einfache Erklärung/ein einfaches Tutorial dazu? Möglichst bebildert und auf deutsch? ;)
    Google recherchen finden meistens englische Seiten (was heißt meistens :rolleyes: ), die Apple-Dokumentation finde ich sehr theoretisch, sie hat kaum Anwendungsbeispiele.

    Als Projekt habe ich mir eine kleine Steuerung vorgenommen, welche aus einer Datei Daten ausliest und anzeigt, später soll das ganze auf Sockets erweitert werden, per Telnet sollen dann Befehle abgearbeitet werden (auf Serverseite, mein Programm sendet nur die Befehle und gibt die Ausgabe grafisch aus). Damit habe ich wohl erstmal 'ne Weile zu tun...

    Vielen Dank im Voraus,
    cu
     
  2. Ulfrinn

    Ulfrinn MacUser Mitglied

    Beiträge:
    6.676
    Zustimmungen:
    586
    MacUser seit:
    30.01.2005
    Der IB ist tatsächlich zunächst gewöhnungsbedürftig, hat man sich aber erst einmal eingearbeitet, sehr effizient.
    Zu deiner Frage mit dem NSTableView: Ein NSTableView speichert keine Daten, wie es beispielsweise eine Listenansicht unter Windows mit Delphi, VB, VC++, usw. tut. Es ist sozusagen nur eine Maske – Die Daten mußt du selbst durch die Instanz einer Klasse die einem bestimmten Protokoll (Objective-C-Fachsprache) entsprechen muß.

    Ich kann dir folgende Seiten ans Herz legen, weil es dort auch Tutorials zum NSTableView gibt:
    http://www.macentwicklerwelt.net/
    http://www.cocoabuilder.com/
    http://cocoadevcentral.com/
    http://www.cocoadev.com/
     
  3. -Nuke-

    -Nuke- MacUser Mitglied

    Beiträge:
    2.135
    Zustimmungen:
    15
    MacUser seit:
    13.09.2003
    Bevor man mit Cocoa anfängt sollte man sich das Model-View-Controller-Prinzip angucken.

    D.h. erst mal in seiner bekannten Umgebung (Delphi, C++) versuchen eine Anwendung nach diesem Prinzip aufzubauen.

    Bei Delphi kann das schon schwerer werden, da es doch nach einem anderen Prinzip arbeitet. C++ sollte da als Terminal-Anwendung schon leichter sein.
     
  4. sECuRE

    sECuRE Thread Starter MacUser Mitglied

    Beiträge:
    566
    Zustimmungen:
    6
    MacUser seit:
    25.06.2005
    Hi,

    das Modell hab' ich mir angesehen, ich habe das so verstanden, dass man immer eine "View"-Komponenten hat, die über den Controller mit den eigentlichen Daten kommuniziert.

    An der praktischen Ausführung hapert's bei mir allerdings gewaltig. Ich weiß nicht, welche Datenstruktur ich wofür nehmen muss und wohin damit?!

    Mein Ansatz ist es, einen NSArrayController zu benutzen, dem gebe ich dann die Keys Number und Value, die ich vorher so festgelegt habe:
    Diese Ordne ich dann auch den Columns des NSTableView zu, soweit so gut. Danach stelle ich das Binding zwischen NSTableView und NSArrayController her. Ich "connect"e delegation und dataSource. Jetzt werde ich unsicher: Die content-eigenschaft zuweisen von NSArrayController? Aber auf was? Muss ich dazu vorher nicht ein NSArray anlegen? Aber die haben ja keinen Typ, wie kann ich dem dann deutlich machen, dass es sich hier um ein Array vom Typ MyDataClass handelt, welches ich danach nutzen will?

    Ziel ist einfach, eine Liste, Array, Dictionary - ganz egal - zu haben, welches ich zur Laufzeit im Code verändern kann und das dann in dem NSTableView dargestellt wird.

    Fragen über fragen. Ich hoffe jemand erbarmt sich, mir das Schritt für Schritt zu erklären, ich finde den Einstieg echt schwierig.

    Vielen Dank schon mal,
    cu
     
  5. Ulfrinn

    Ulfrinn MacUser Mitglied

    Beiträge:
    6.676
    Zustimmungen:
    586
    MacUser seit:
    30.01.2005
    Im Prinzip funktioniert das Ganze mit dem NSTableView so, daß du deine Daten in einer eigenen Klasse speicherst und der NSTableView dann über einen Selector diese Daten abfragt:

    (Pseudo-Code)
    @interface MeineDatenquelle
    {
    NSArray *mDaten;
    }

    @implementation
    {

    - (id)objektFuerZeile: … undSpalte: …
    {
    return dasObjektAus_mDaten;
    }

    }
     
  6. sECuRE

    sECuRE Thread Starter MacUser Mitglied

    Beiträge:
    566
    Zustimmungen:
    6
    MacUser seit:
    25.06.2005
    Hi,

    ja, soweit war ich ja auch. Nur, brauch ich von meinem Typ jetzt eine Instanz oder wird automatisch eine erzeugt? Was genau gebe ich beim NSArrayController ein?

    Edit: Ich hab jetzt mal folgenden Code ganz ohne Controller auf die Beine gestellt, nur um mal etwas funktionierendes hinzubekommen (Erfolgserlebnisse sind wichtig, wisst ihr ja :D):
    table ist mein Outlet, was mit einem NSTableView verknüpft ist. Leider erscheint kein Eintrag ("lalelu" müsste ja erscheinen?) in der Liste. Hier die Logausgabe:

    cu
     
    Zuletzt bearbeitet: 28.06.2005
  7. lucia

    lucia MacUser Mitglied

    Beiträge:
    166
    Zustimmungen:
    1
    MacUser seit:
    04.01.2005
    Bin gerade auch von Delphi auf Cocoa umgestiegen und hatte zu Beginn ähnliche Probleme. Ich kann folgendes empfehlen:

    "Cocoa Programming For Mac OS X" von Aaron Hillegass. Steht alles drin, was man für den Ein-/Umstieg braucht.

    Dieser NSTableView ist genial, zu Beginn viel umständlicher als in Delphi, dann aber durch die Unabhängigkeit der eigenen Datenspeicherung viel mächtiger und allgemeiner. Dagegen wirkt der TableView von Delphi geradezu archaisch. (Obwohl ich Delphi auch oft genug vermisse).

    1) Du bastelst Dir Deinen NSTableView im Interface Designer. Die Methode "Delegate" muß auf Deine Controller-Instanz zeigen.

    2) Du erstellst Deine Datenquelle, z.B. einen NSArray oder - falls der noch verändert werden muß - einen NSMutableArray. Das geht ähnlich wie in Delphi, zu Testzwecken:

    meinArray = [[NSArray alloc] arrayWithObjects:mad:"item1",@"item2",nil];

    3) im Controller müssen fürs Auslesen die Methoden

    -(int)numberOfRowsInTableView:(NSTable *)atableView
    {
    return [meinArray count];
    }

    und

    -(id)tableView:(NSTableView *)atableView
    objectValueForTableColumn:(NSTableColumn *)aTableColumn
    row:(int)rowIndex;
    {
    return [meinArray objectAtIndex:rowIndex];
    }

    gesetzt sein und ggf. fürs Editieren der Daten (dann aber NSMutableArray als Quelle!) noch

    -(void)tableView:(NSTableView *)aTableView
    setObjectValue:(id)anObject
    forTableColumn:(NSTableColumn *)aTableColumn
    row:(int)rowIndex;
    {
    ...
    }

    Im Interface Designer können den Columns auch Identifier zugeordnet werden. Bei mehreren NSTableViews, die von einem Controller verarbeitet werden, müssen diese eben vorher abgefragt werden.

    Hoffentlich klappt's, Gruß.
     
  8. lucia

    lucia MacUser Mitglied

    Beiträge:
    166
    Zustimmungen:
    1
    MacUser seit:
    04.01.2005
    Mist, die blöden Männchen sind eigentlich Doppelpunkte und Klammer auf. Wie blöd...
     
  9. sECuRE

    sECuRE Thread Starter MacUser Mitglied

    Beiträge:
    566
    Zustimmungen:
    6
    MacUser seit:
    25.06.2005
    Hi,

    das nächste mal "grafische Smilies deaktiveren" ankreuzen ;).
    Ansonsten danke für den vielen Code, das ist _in etwa_ das, was ich oben gepostet hab/vorher mal hatte. Nur noch eine kleine Frage:
    Und wo setze ich das? Das ist leider nicht so klar strukturiert wie in Delphi - jedes mal, wenn ich das eine Objekt ins andere "ctrl-dragge" kommen neue Eigenschaften, Methoden, Zeugs.. verwirrend.

    Danke & cu
     
  10. lucia

    lucia MacUser Mitglied

    Beiträge:
    166
    Zustimmungen:
    1
    MacUser seit:
    04.01.2005
    Du doppelklickst auf Deinen TableView im Interface Designer, nachdem Du unter "Tools" den Inspektor geöffnet hast. Du ctrl-ziehst eine Verbindung zwischen dem TableView und Deinem - hoffentlich bereits instanziierten (???) - MyObject. Im Inspektor verbindest Du dataSource (hatte ich eben vergessen!) und delegate durch Drücken des Knopfes "Connect".

    Gruß.
     
Die Seite wird geladen...

Diese Seite empfehlen