Come posso usare un NSArray e un NSArrayController con Core Data?
-
06-07-2019 - |
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
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?