2010-04-09 5 views
1

Cette classe avec laquelle je travaille a trois variables d'instance qui m'intéressent, NSmutablearrays xArray yArray et zArray, il y a aussi d'autres NSmutablearrays, a, bArray et c. Je viens d'ajouter accesseursméthode retournant la mauvaise variable

- (NSMutableArray *) xArray { 
    return xArray; 
} 

idem pour y et z. Cependant, il retourne yArray, zArray et bArray pour une raison quelconque. Pourquoi cela se produit-il? Ok, je viens de changer les noms des méthodes en GetXArray et tout semble retourner les bonnes variables. Maintenant, je suis vraiment confus. Comment diable est-ce arrivé et comment puis-je empêcher que cela se produise à l'avenir?

+1

Nous devrions voir plus de code pour pouvoir dire ce qui se passe; la méthode accesseur ci-dessus est parfaitement valide. Comment définissez-vous ces variables? –

+0

tous les tableaux sont déclarés dans l'en-tête en une ligne: NSMutableArray \t * aArray, * bArray, * xArray, * yArray, * zArray; Lors de l'initialisation de la classe, j'appelle une méthode pour lire à partir du fichier une ligne à la fois, puis j'ajoute chaque valeur au tableau. [xArray addObject: [NSNumber numberWithFloat: x]]; Ce n'est pas un problème de lecture de fichier. Quand j'ai fait NSLog (@ "objets:% @% @% @", xArray, yArray.ZArray), les tableaux corrects ont été imprimés. Toutefois, la méthode xArray a renvoyé yArray lors de son appel. Lorsque j'ai changé le nom de la méthode en GetxArray, les choses étaient à nouveau correctes. – cocoanewbie

+0

Cela n'a aucun sens. Avez-vous construit et analysé? – bbum

Répondre

0

Ceci est assez mise en avant droite/stuff getter:

XYZArray.h

#import <Cocoa/Cocoa.h> 
@interface XYZArray : NSObject { 
    NSMutableArray *x; 
    NSMutableArray *y; 
    NSMutableArray *z; 
} 

-(NSMutableArray*) x; 
-(NSMutableArray*) y; 
-(NSMutableArray*) z; 

-(void) setX:(NSMutableArray*)newArray; 
-(void) setY:(NSMutableArray*)newArray; 
-(void) setZ:(NSMutableArray*)newArray; 
@end 

XYZArray.m

#import "XYZArray.h" 
@implementation XYZArray 
- (id)init 
{ 
    if((self = [super init])) 
    { 
     x = [[NSMutableArray alloc] init]; 
     y = [[NSMutableArray alloc] init]; 
     z = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

- (void) dealloc 
{ 
    [x release]; 
    [y release]; 
    [z release]; 
    [super dealloc]; 
} 


-(NSMutableArray*) x 
{ 
    return x; 
} 

-(NSMutableArray*) y 
{ 
    return y; 
} 

-(NSMutableArray*) z 
{ 
    return z; 
} 

-(void) setX:(NSMutableArray*)newArray 
{ 
    [newArray retain]; 
    [x release]; 
    x = newArray; 
} 

-(void) setY:(NSMutableArray*)newArray 
{ 
    [newArray retain]; 
    [y release]; 
    y = newArray; 
} 

-(void) setZ:(NSMutableArray*)newArray 
{ 
    [newArray retain]; 
    [z release]; 
    z = newArray; 
} 
@end 

Mieux encore, si vous utilisez Objectif -C 2.0 vous pouvez faire tout cela avec des propriétés et ne pas écrire de code du tout. Lisez ceci pour une introduction, http://macdevelopertips.com/objective-c/objective-c-properties-setters-and-dot-syntax.html.

Questions connexes