2011-04-06 2 views
1

Je voudrais obtenir de l'aide pour trier le code que j'ai mis en place pour implémenter un singleton NSMutableArray.NSMutable singleton question

fichier .H

@interface MySingleton : NSObject { 

    NSMutableArray *globalArray; 

} 

+ (MySingleton *)instance; 

- (NSMutableArray *) getArray; 

- (void) addArray:(NSObject *)arrayToAdd; 

- (id) init; 



.m file 

@implementation MySingleton 


- (id) init 
{ 
    self = [super init]; 
    globalArray = [[NSMutableArray alloc] init]; 
    return self; 
} 


+ (MySingleton *)instance { 

    static MySingleton *instance; 

    @synchronized(self) { 
     if(!instance) { 
      instance = [[MySingleton alloc] init]; 

     } 
    } 
    return instance; 
} 


- (NSMutableArray *) getArray{ 
    return globalArray; 
} 



- (void) addArray:(NSMutableArray *)arrayToAdd 
{ 

    [globalArray addObject:arrayToAdd]; 

} 

someviewcontroller.m

MySingleton *prodInstance = [MySingleton instance]; 
[prodInstance addArray:tmpArray]; 
NSLog(@"cnt tmpArray %i",[tmpArray count]); 
NSLog(@"cnt singleton %i",[[prodInstance getArray] count]); 

La console affiche compte 3 et 1.

Je pensais que [prodInstance getArray] sera le même que le tmpArray .

Merci

Répondre

1

Le problème est votre méthode addArray met tmpArray l'intérieur globalArray, ce qui est apparemment pas ce que vous voulez.

Je ne pense pas qu'il y ait vraiment de raison d'avoir addArray du tout - appelez simplement getArray pour obtenir le tableau global, et travailler avec cela. Par exemple:

// add all objects in tmpArray to prodInstance global array 
[[prodInstance getArray] addObjectsFromArray:tmpArray]; 
+0

Merci pour la réponse rapide. – user643097

0

En -addArray:, vous ajoutez l'argument de tableau arrayToAddcomme un seul élément dans le tableau global. On dirait que vous voulez ajouter tous les éléments de l'argument de tableau à la place, donc remplacer

[globalArray addObject:arrayToAdd]; 

avec

[globalArray addObjectsFromArray:arrayToAdd]; 

En outre, étant donné que l'argument n'a pas besoin d'être un tableau mutable, pensez à modifier le type de paramètre à NSArray *.