2010-06-25 18 views
0

J'essaye d'intercepter une méthode addObject de NSArrayController (thingsController) avec la méthode d'accesseur suivante.Pourquoi NSArrayController n'appelle pas les méthodes d'accès via des liaisons?

- (void)insertObject:(Thing *)thing 
inThingsAtIndex:(NSUInteger)index; 

J'ai deux classes: Thing et MyDocument. Chose a une propriété: nom. MyDocument a un NSMutableArray appelé choses et un NSArrayController appelé thingsController. Dans la NIB, le propriétaire du fichier est défini sur MyDocument et le tableau de contenu de NSArrayController est lié au propriétaire du fichier et le chemin du modèle est défini sur les objets. Le NSArrayController a également un mode défini sur Class, le nom de classe défini sur Thing et une clé nommée name. Dans MyDocument, j'ai une méthode appelée createThing, qui envoie d'abord thingsController newObject, puis l'envoie à addObject. Si je place un point d'arrêt dans la méthode init dans Thing, il est appelé quand thingsController est envoyé newObject. Cependant, lorsque thingsController est envoyé addObject, ma méthode d'accesseur insertObject: (Chose *) chose inThingsAtIndex: (NSUInteger) index n'est pas appelée. J'ai lu la documentation d'Apple sur les méthodes d'accès au codage de valeurs-clés et je pense que je suis conforme, mais il me manque quelque chose.

Toute aide serait grandement appréciée.

code ci-dessous ...

Thing.h

#import <Cocoa/Cocoa.h> 


@interface Thing : NSObject { 
NSString *name; 

} 
@property (readwrite, copy) NSString *name; 

@end 

Thing.m

#import "Thing.h" 


@implementation Thing 

@synthesize name; 

-(id) init 
{ 
[super init]; 

name = @"Default"; 

return self; 
} 

@end 

MyDocument.h

#import <Cocoa/Cocoa.h> 
@class Thing; 

@interface MyDocument : NSDocument 
{ 
NSMutableArray *things; 
IBOutlet NSArrayController *thingsController; 
IBOutlet NSTableView *tableView; 
} 


- (IBAction)createThing:(id)sender; 

- (void)insertObject:(Thing *)thing 
inThingsAtIndex:(NSUInteger)index; 

- (void)removeObjectFromThingsAtIndex:(NSUInteger)idx; 


@end 

MyDocument.m

- (IBAction)createThing:(id)sender 
{ 
//Create the object 
Thing *t = [thingsController newObject]; 

//Add it to the content array of 'thingsController' 
[thingsController addObject:t]; 

NSLog(@"The new content of array is%@",things); 

[t release]; 
} 

Répondre

1

Excuses. J'ai fait un changement et ça marche maintenant. Je pensais avoir essayé dans le passé et il n'a pas travaillé ...

J'ai ajouté

@property (readwrite, copy) NSMutableArray *things; 

à MyDocument.h

et

@synthesize things; 

à MyDocument.m .

Cela semble fonctionner.

Cordialement.