2009-01-29 6 views
0

J'ai créé dans mon application CoreData une entité avec quelques attributs. Imaginez une tableview et un NSArrayController lié. Avec les deux je crée (et édite) mes "instances" d'entité. Ma question est comment je peux obtenir les valeurs de ces attributs à mon code. S'il y a plus de questions:Comment obtenir des valeurs de CoreData-Entities au code

Répondre

2

Vous devez obtenir une référence au NSArrayController. Si vous chargez la NIB vous-même, vous pouvez ajouter une instance IBOutlet à la classe définie comme NIBs "propriétaire du fichier". Lorsque vous chargez une plume, vous indiquez l'instance de la classe "File Owner" de la NIB en tant que propriétaire. Si vous ne chargez pas la NIB vous-même (c'est-à-dire qu'elle est chargée automatiquement par Cocoa comme nib/xib MaineMenu de votre application), créez une instance de votre propre classe dans la plume et ajoutez une IBOutlet à cette instance. Vous créez un IBOutlet dans votre classe comme ceci:

@interface MyClass : NSObject { //of course your class doesn't have to be a direct descendent of NSObject 
    IBOutlet NSArrayController *arrayController; 
} 

@property (retain,nonatomic,readwrite) IBOutlet NSArrayController *arrayController; 

... 

@end 

@implementation 
@synthesize arrayController; 

- (void)dealloc { 
    [arrayController release]; 
    [super dealloc]; 
} 
@end 

Connectez le IBOutlet dans votre classe au NSArrayController (controll-cliquez sur le propriétaire du fichier dans le premier cas ou l'instance de votre classe dans le second cas ci-dessus) et faites glisser vers NSArrayController. Lorsque vous relâchez la souris, vous obtenez une pop-up des IBOutlets dans la source de glisser. Sélectionnez l'IBOutlet que vous avez créé (par exemple "arrayController" dans l'exemple ci-dessus).

Une la pointe est chargé (après awakeFromNib est appelé dans votre classe), vous pouvez accéder au arrayController via la sortie:

NSArray *content = [[self arrayController] arrangedObjects]; 

et vous pouvez faire ce que vous plaît avec les valeurs du tableau .

+0

est-il correct de dire que vous n'avez pas besoin de @property et de @synthesize si vous ne chargez pas la plume vous-même? – catsby

+0

Le code de chargement NIB connectera directement les variables d'instance, mais en utilisant le modèle ci-dessus est le seul garanti pour gérer correctement la gestion de la mémoire dans les environnements GC et non GC, selon mmalc. –

1

Si j'ai ceci correct, vous avez un TableView, lié à un NSArrayController qui est lié à vos données.

La méthode simple: Créez un objet IBOutlet dans votre classe (généralement le propriétaire du fichier) et dans Interface Builder, connectez ce point IBOutlet à NSArrayController. Vous pouvez ensuite obtenir les valeurs dont vous avez besoin à partir de ce tableau.

Questions connexes