Domanda

Ho del codice che deve accedere a un NSArray per funzionare. Ho un NSArray che sto usando con Core Data e conterrà dei dati, ma non sono sicuro di come fare in modo che il mio NSArrayController acceda a NSArray.

Non posso semplicemente dichiararlo nel file Header in questo modo: NSArray * objectArray; perché non sa come o a quale NSArray accedere. Come posso accedere esattamente a NSArray che sto utilizzando con i dati principali?

Il mio file di intestazione:

#import <Cocoa/Cocoa.h>


@interface MyOutlineView : NSOutlineView {
    NSArrayController* objectArray;
}

@end

Il mio file di implementazione:

#import "MyOutlineView.h"

@implementation MyOutlineView

- (void) outlineView: (NSOutlineView *) aView
     willDisplayCell: (id) aCell
      forTableColumn: (NSTableColumn *)aColumn
                item: (id) anItem
{
    id rootObj = anItem;
    unsigned row = [aView rowForItem:anItem];

    [aCell setDrawsBackground: YES];

    while ([aView levelForRow:row] != 0) {
        row --;
        rootObj = [aView itemAtRow:row];
    }

    // The colours here are foul and ugly.  Use something else, for
    // God's sake!
    if( [objectArray indexOfObject:rootObj] % 2 )
        [aCell setBackgroundColor: [NSColor yellowColor]];
    else
        [aCell setBackgroundColor: [NSColor blueColor]];
}

@end
È stato utile?

Soluzione

Ho realizzato un'app di test con IBOutlet collegato a NSArrayController da Xib. In questo test ho:

  • avviato dal modello dell'applicazione Core Data;
  • Entità creata nel modello dati con due attributi (stringa, int);

in Xib:

  • Controller di array con contesto di oggetto gestito, collegato a Test_AppDelegate.managedObjectContext;
  • TableView con i col collegati al primo e secondo attributo del controller dell'array di organizzatoOggetti;
  • Pulsanti Aggiungi e Rimuovi, collegati al controller Aggiungi: e rimuovi: azioni;
  • Tasto
  • " Mostra conteggio " ed etichetta; -

nel codice (Test_AppDelegate. *):

  • IBOutlet NSArrayController * ac; (collegato in Xib da Test_AppDelegate.ac al controller di array);
  • IBOutlet NSTextField * nLabel; (collegato in Xib a Label);
  • (IBAction) showNum: mittente (id); (collegato dal pulsante " Mostra conteggio ");
  • codice in action showNum: [nLabel setIntValue: [[ac organisedObjects] count]];

Sono in grado di:

  • Aggiungi / Rimuovi oggetti nella vista tabella e nell'array controllato;
  • Accedi a NSArrayController dal codice per ottenere arrangiato array di oggetti.

Quindi l'associazione IBOutlet dal codice al controller dell'array di Xib e l'accesso ai suoi oggetti organizzati dovrebbe funzionare.

Altri suggerimenti

Potrei non ottenerlo, ma non puoi semplicemente creare un metodo initWithArray?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top