¿Cómo puedo usar un NSArray y NSArrayController con Core Data?
-
06-07-2019 - |
Pregunta
Tengo un código que necesita acceder a un NSArray para funcionar. Tengo un NSArray que estoy usando con Core Data y tendré datos, pero no estoy seguro de cómo hacer que mi NSArrayController acceda al NSArray.
No puedo simplemente declararlo en el archivo de encabezado de esta manera: NSArray * objectArray;
porque no sabe cómo o a qué NSArray
acceder. ¿Cómo accedería exactamente al NSArray que estoy usando con Core Data?
Mi archivo de encabezado:
#import <Cocoa/Cocoa.h>
@interface MyOutlineView : NSOutlineView {
NSArrayController* objectArray;
}
@end
Mi archivo de implementación:
#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
Solución
Hice una aplicación de prueba con IBOutlet conectado a NSArrayController desde Xib. En esta prueba tengo:
- comenzó desde la plantilla de la aplicación Core Data;
- entidad creada en el modelo de datos con dos atributos (string, int);
en Xib:
- Controlador de matriz con contexto de objeto administrado, conectado a Test_AppDelegate.managedObjectContext;
- TableView con cols conectados al primer y segundo atributo de Array Controller de arreglóobjetos;
- Botones Agregar y quitar, conectados a las acciones de agregar y quitar del controlador de matriz;
- Botón " Mostrar recuento " y etiqueta; -
en el código (Test_AppDelegate. *):
- IBOutlet NSArrayController * ac; (conectado en Xib desde Test_AppDelegate.ac al Array Controller);
- IBOutlet NSTextField * nLabel; (conectado en Xib a Label);
- (IBAction) showNum: (id) remitente; (conectado desde " Mostrar cuenta " botón);
- código en acción showNum: [nLabel setIntValue: [[ac fixedObjects] count]];
Puedo:
- Agregar / Eliminar objetos a la vista de tabla y matriz controlada;
- Acceda a NSArrayController desde el código para organizar la matriz de objetos.
Por lo tanto, vincular IBOutlet del código al controlador de matriz de Xib y acceder a sus objetos arreglados debería funcionar.
Otros consejos
Puede que no esté obteniendo esto, pero ¿no puede simplemente crear un método initWithArray?