1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

NSTableView richtig Anwenden?

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Der Paule, 24.01.09.

  1. Der Paule

    Der Paule Königsapfel

    Dabei seit:
    26.05.07
    Beiträge:
    1.200
    Moin,

    bin gerade dabei mit Obj-C und Cocoa zu arbeiten. Allerdings komm ich grad mit der NSTableView nicht weiter. Die Beschreibungen dazu, sind meiner Meinung nach recht dürftig.
    Meist ohne Erklärungen, schlecht lesbaren und nicht formatierten, seitenweise Quellcode.

    Hoffentlich kann mir jemand besser erklären wie TableViews funktionieren und anzuwenden sind. So wie ich verstanden habe muss ich zwei Methoden der TableView einbinden um das ganze überhaupt nutzen zu können. Das wären
    Code:
    - (int)numberOfRowsInTableView:([URL="http://www.cocoadev.com/index.pl?NSTableView"]NSTableView[/URL] *)tableView
    

    und
    Code:
     - (id)tableView:([URL="http://www.cocoadev.com/index.pl?NSTableView"]NSTableView[/URL] *)tableVieobjectValueForTableColumn:([URL="http://www.cocoadev.com/index.pl?NSTableColumn"]NSTableColumn[/URL] *)tableColumn row:(int)row
    
    Die Steuerung und Nutzung der Methoden übernimmt Cocoa? ja selbst. Meine Frage ist jetzt. Wie arbeite ich dann mit der TableView. Wenn ich jetzt z.B. die Methode
    Code:
    - (void)tableView:([URL="http://www.cocoadev.com/index.pl?NSTableView"]NSTableView[/URL] *)aTableView setObjectValue:(id)anObject[FONT=Arial]
    [/FONT]   forTableColumn:([URL="http://www.cocoadev.com/index.pl?NSTableColumn"]NSTableColumn[/URL] *)aTableColumn row:(int)rowIndex
    

    einbinde. Muss ich dann dort nur dem Daten Array ein neues Object verpassen?
    Wann wird die Methode denn dann aufgerufen, bzw. wie?
    Beim hinzufügen muss die reloadData Methode
    von TableView aufgerufen werden damit die neuen
    Daten angezeigt werden. Allerdings erhalte ich immer eine Warnung. Die wie folgt aussieht:

    [​IMG]

    Klar keine Fehlermeldung. Allerdings finde ich es merkwürdig das überall, alle die reloadData
    Methode nutzen ohne auf eine Warnung hinzuweisen. Oder mach ich was Falsch? Bestimmt.
    Ich muss bei jedem Eintrag ein Object meines Modells erstellen und dem Array hinzufügen
    und danach ein reloadData ausführen. Richtig?

    Ich habe das Beispiel aus dem Buch von Rodewig und Negm-Awad umgesetzt.
    Allerdings läuft das Programm nicht. Ich erhalte keine Fehlermeldung oder Warnung.
    Es hüpft lediglich das APP Symbol im Dock beim Compilieren und Ausführen des Projekts.

    Mein aufbau sieht wie folgt aus. Ich habe ein Fenster mit einem Splitview. In einem View hab ich
    eine TableView. Diese bzw. die DataSource habe ich mit meinem Controller verbunden. Ich habe
    eine Klasse als Modell für die TableView. Diese enthält einen String mit Getter/Setter Methoden.
    Die Klasse Controller enthält sdie beiden ersten Methoden von Oben und das Daten Array. Sowie zwei
    Instanzen der Modell Klasse. In der Methode awakeFromNib sollen zwei Objekte dem Array hinzugefügt
    werden und in der TableView dargestellt werden.

    Hier die Modell Klasse

    Code:
    @interface clsTableView : NSObject 
    {
        NSString *strtbviewItem;
    }
    
    @property (retain) NSString *strtbviewItem;
    
    @end
    
    @implementation clsTableView
    @synthesize strtbviewItem;
    @end
    

    Und hier die Controller Klasse:
    Code:
    @interface controller : NSObject 
    {
        clsTableView *tbvItem_One;
        clsTableView *tbvItem_Two;
        NSMutableArray *maItems;
        IBOutlet NSTabView *tbView;
    }
    
    -(int)numberOfRowsInTableView:(NSTableView *)Table;
    -(id)tableView:(NSTableView *)Table objectValueForTableColumn:(NSTableColumn *)Column row:(int)Row;
    
    @end
    
    @implementation controller
    
    -(void)awakeFromNib
    {
        tbvItem_One = [[clsTableView alloc] init];
        tbvItem_Two = [[clsTableView alloc] init];
        tbvItem_One.strtbviewItem = @"Eintrag 1";
        tbvItem_Two.strtbviewItem = @"Eintrag 2";
        
        maItems = [[NSMutableArray alloc] init];
        [maItems addObject:tbvItem_One];
        [maItems addObject:tbvItem_Two];
    }
    
    -(int)numberOfRowsInTableView:(NSTableView *)Table
    {
        return [maItems count];
    }
    
    -(id)tableView:(NSTableView *)Table objectValueForTableColumn:(NSTableColumn *)Column row:(int)Row
    {
        return [maItems objectAtIndex:Row];
    }
    
    @end
    

    Vielleicht kann mir jemand auf die Sprünge helfen. Danke schommal im vorraus.

    mfg
    paule
     
  2. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Wieso kaufst du dir nicht einführende Literatur dazu?
     

Diese Seite empfehlen