Description succincte de ma configuration:Comment dois-je implémenter Hash pour un NSMutableSet stockant des objets SQL?
Il y a une classe de base SQLObject
qui a un entier rowId
. elle met en œuvre isEqual
en comparant sa classe et son rowId
:
return [self isKindOfClass:[otherObject class]] && self.rowId == otherObject.rowId;
Elle implémente hachage par XOR sa classe avec son rowId:
return [[self class] hash]^self.rowId;
Tous les objets sont stockés dans un NSMutableSet
de sorte que si elles sont demandées la DB à nouveau, le même objet est utilisé plutôt que d'en créer un nouveau. Lors de la libération d'un SQLObject
, il vérifie si le retainCount
est exactement 1, et si c'est le cas, le supprime de l'ensemble, le libérant ainsi.
Le problème est qu'il ne trouve pas l'objet lorsqu'il tente de le retirer de l'ensemble. Le rowId ne change jamais, pas plus que la classe, évidemment, donc ni le hash ni l'isEqual ne changent tout au long de la vie de l'objet. Que se passe-t-il? Quelqu'un a-t-il des idées sur la raison pour laquelle ce n'est peut-être pas le cas?
Si je change la collection en NSMutableArray, elle la trouve.
J'aimerais voir votre code pour ajouter et tester l'appartenance à NSMutableSet. –