Краткое описание моей установки:
Существует базовый класс SQLObject
с целым числом rowId
. он реализует isEqual
, сравнивая его класс и его rowId
:
return [self isKindOfClass:[otherObject class]] && self.rowId == otherObject.rowId;
Он реализует хеш путем XORing своего класса с его rowId:
return [[self class] hash] ^ self.rowId;
Все объекты хранятся в NSMutableSet
, поэтому, если они снова запрашиваются из БД, используется один и тот же объект, а не создается новый. При выпуске SQLObject
он проверяет, равен ли retainCount
ровно 1, и, если это так, удаляет его из набора, освобождая его.
Проблема в том, что он не находит объект, когда пытается удалить его из набора. RowId никогда не изменяется, как и класс, очевидно, поэтому ни хэш, ни isEqual не меняются на протяжении всей жизни объекта. В чем дело? У кого-нибудь есть идеи, почему он не может его найти?
Если я изменю коллекцию на NSMutableArray, он найдет ее.