2010-06-10 9 views
1

J'essaie de créer un NSMutableDictionary (dictA) avec objectA. Lorsque j'essaie d'afficher mon dictionnaire (NSLog), chaque touche pointe vers la même adresse. J'ai un objectA_1 qui est de type objectA et utilisé pour configurer le dictionnaire. En outre, si j'essaie de getObject, j'obtiens toujours la dernière clé/valeur qui a été ajoutée au dictionnaire. J'ai essayé setValue et obtenu les mêmes résultats. Y at-il un problème avec mon objetA? La méthode de publication ne fonctionne pas correctement? Est-ce que je retiens quand je ne devrais pas? Je vous remercie.NSMutableDictionary mémoire/adresse, la version ne fonctionne pas?

dictA = [[NSMutableDictionary alloc] init]; 
objectA *objectA = [[objectA alloc] init]; 

objectA.ID = 5; 
[dictA setObject:objectA forKey:@"apple"]; 
[objectA release]; 

objectA.ID = 50; 
[dictA setObject:objectA forKey:@"japan"]; 
[objectA release]; 

objectA.ID = 6; 
[dictA setObject:objectA forKey:@"paris"]; 
[objectA release]; 

objectA.ID = 11; 
[dictA setObject:objectA forKey:@"pizza"]; 
[objectA release]; 

// NSLog:

apple = "objectA: 0x175830"; 
japan = "objectA: 0x175830"; 
paris = "objectA: 0x175830"; 
pizza = "objectA: 0x175830"; 
+0

Avez-vous implémenté la méthode 'description' pour objectA? – Senseful

Répondre

1

Je suppose que vous vouliez dire:

objectA *objectA_1 = [[objectA alloc] init]; 

Vous ne doit être libérer l'objet qu'une seule fois. C'est parce que chaque fois que le dictionnaire supprime l'élément, il appellera automatiquement la libération sur l'objet, car il retient automatiquement l'objet chaque fois que vous l'ajoutez au dictionnaire.

Essayez ce code à la place:

dictA = [[NSMutableDictionary alloc] init]; 
objectA *objectA_1 = [[objectA alloc] init]; 

[dictA setObject:objectA_1 forKey:@"apple"]; 
[dictA setObject:objectA_1 forKey:@"japan"]; 
[dictA setObject:objectA_1 forKey:@"paris"]; 
[dictA setObject:objectA_1 forKey:@"pizza"]; 
[objectA_1 release]; 

De plus, vous devez implémenter la méthode description de votre objet personnalisé afin que NSLog sait comment l'imprimer.