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
¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top