La compilazione di NSTableview da una matrice modificabile

Ho cercato per due giorni, e costantemente in esecuzione in un vicolo cieco.

Ho passato Aaron Hillegass Cacao di Programmazione per MAC OS X, e di fatto tutte le pertinenti esercizi di trattare con NSTableview e matrici modificabile, e ho cercato di modificarlo per soddisfare le mie esigenze.

Tuttavia nessuno di loro sembra di essere con un array di oggetti come origine dati, sembra di usare la tableview come origine.

Sto cercando di implementare Jonas Jongejan del “rielaborazione” del mio codice qui, con un Cacao di front-end per visualizzare i risultati.

Puntatori o suggerimenti, so che questo dovrebbe essere semplice, ma mi sono perso nel deserto qui.

Posso compilare la tabella impostando la matrice

InformationsquelleAutor S1syphus | 2010-08-03

 

4 Replies
  1. 14

    È abbastanza semplice, in realtà, una volta che si arriva a capire (ovviamente!). Non è possibile utilizzare un NSArray direttamente come una tabella di origine. È necessario creare un oggetto personalizzato che implementa NSTableViewDataSource o implementare il protocollo esistente classe – di solito un controller. Se si utilizza Xcode per creare un modello di documento di applicazione, il controller del documento di classe (verrà chiamato MyDocument) è una buona classe da utilizzare.

    È necessario attuare almeno questi due metodi:

     numberOfRowsInTableView:
     tableView:objectValueForTableColumn:row:

    Se si dispone di un mutevole array contenente i valori che si desidera utilizzare in una tabella con una colonna, qualcosa di simile dovrebbe fare come iniziare:

     numberOfRowsInTableView: (NSTableView*) aTableView
    {
        return [myMutableArray count];
    }
    
     tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
    {
        return [myMutableArray objectAtIndex: rowIndex];
    }

    Si è verificato solo a me che si poteva aggiungere due metodi di cui sopra come categoria NSArray sostituzione myMutableArray con self e quindi è possibile utilizzare una matrice come origine dati.


    Comunque, con una matrice modificabile, è importante che ogni volta che si modifica, è necessario lasciare che la tabella di vista so che è stato cambiato, quindi è necessario inviare la tabella di visualizzazione -reloadData.


    Se la tua tabella di vista ha più di una colonna e si desidera compilare con le proprietà degli oggetti contenuti in un array, c’è un trucco che si può fare per rendere più facile per voi stessi. Diciamo che gli oggetti dell’array sono istanze di una classe Persona con due metodi definiti:

    -(NSString*) givenName;
    -(NSString*) familyName;

    e volete che il vostro tavolo per poter avere una visione di colonna, per ognuno di questi, è possibile impostare il identifier proprietà di ciascuna colonna per il nome della proprietà in Persona che la colonna visualizza e usare qualcosa come il seguente:

     tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
    {
        Person* item = [myMutableArray objectAtIndex: rowIndex];
        return [item valueForKey: [tableColumn identifier]];
    }

    Se si sostituisce valueForKey: con valueForKeyPath: e la vostra Persona di classe, inoltre, ha i seguenti metodi:

    -(Person*) mother;
    -(Person*) father;
    -(NSString*) fullName;  //concatenation of given name and family name

    è possibile aggiungere colonne della tabella con identificatori come: father.fullName o mother.familyName e i valori verranno compilati automaticamente.

  2. 3

    Si potrebbe andare l’origine dati di rotta e di fare tutto il lavoro pesante di te, o si può lasciare associazioni di fare tutto il lavoro pesante per voi. Aggiungi un NSArrayController per il pennino file che ha la visualizzazione della tabella di esso. Assicurarsi che il Proprietario del File del pennino è impostato per la stessa classe che ha la matrice modificabile in esso. Associare il contentArray del controller di array di File's Owner.myMutableArray. Per ogni colonna associare Value per il controller di array arrangedObjects e aggiungere il tasto appropriato percorso. Questo vi permetterà di ottenere cose come l’ordinamento per libero se avete bisogno mai.

  3. 1

    Su iPhone (so che stai parlando di Mac, ma forse questo potrebbe aiutare) è necessario utilizzare la delega per il caricamento di una tableView. Si chiede una cella e si utilizza la matrice di inserire i dati necessari.
    Non sono sicuro se questo funziona per il Mac, ma potrebbe essere la pena di guardare in.

    Forse impostare l’origine dati di auto e di usare tali metodi delegati per accedere al tuo array basati sulla riga e di colonna #

    • la risposta è per l’iPhone, ma è possibile seguire il link per vedere cosa intendo
    • Oops, ho avuto iphone sul mio cervello 🙂

Lascia un commento