Question

J'ai du code qui doit accéder à un NSArray pour fonctionner. J'ai un NSArray que j'utilise avec Core Data et j'aurai des données, mais je ne sais pas comment faire en sorte que NSArrayController accède à NSArray.

Je ne peux pas simplement le déclarer dans le fichier d'en-tête comme suit: NSArray * objectArray; car il ne sait ni comment ni à quel NSArray accéder. Comment accéder exactement au NSArray que j’utilise avec Core Data?

Mon fichier d'en-tête:

#import <Cocoa/Cocoa.h>


@interface MyOutlineView : NSOutlineView {
    NSArrayController* objectArray;
}

@end

Mon fichier d'implémentation:

#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
Était-ce utile?

La solution

J'ai créé une application de test avec IBOutlet connecté à NSArrayController de Xib. Dans ce test, j'ai:

  • a commencé à partir du modèle d'application Core Data;
  • créé une entité dans un modèle de données avec deux attributs (string, int);

dans Xib:

  • Contrôleur de matrice avec le contexte d'objet géré, connecté à Test_AppDelegate.managedObjectContext;
  • TableView avec des colonnes connectées au premier et deuxième attribut d’objets arrangés du contrôleur de matrice;
  • Boutons Ajouter et Supprimer, connectés à la commande add: and remove: actions du contrôleur de la matrice;
  • Bouton
  • "Afficher le nombre" et étiquette; -

dans le code (Test_AppDelegate. *):

  • IBOutlet NSArrayController * ac; (connecté dans Xib de Test_AppDelegate.ac au contrôleur de tableau);
  • IBOutlet NSTextField * nLabel; (connecté en Xib à Label);
  • (IBAction) showNum: expéditeur (id); (connecté à partir du bouton "Afficher le nombre");
  • code en action showNum: [nLabel setIntValue: [[ac ac rangedobjects] count]];

Je suis capable de:

  • Ajouter / supprimer des objets à la vue tabulaire et au tableau contrôlé;
  • Accédez à NSArrayController à partir du code pour obtenir le tableau arrayObjects.

Ainsi, lier IBOutlet du code au contrôleur multidisque de Xib et accéder à ses organigrammes arrangés devrait fonctionner.

Autres conseils

Je ne comprends peut-être pas cela, mais vous ne pouvez pas simplement créer une méthode initWithArray?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top