У меня есть обычай IsEqual для проверки равенства между объектами моего класса:Тестирование NSNumber для ноля в IsEqual
BOOL result = ([attempt.attemptId isEqualToNumber:self.attemptId] &&
[attempt.pitcher isEqualToString:self.pitcher] &&
[attempt.vsTeam isEqualToString:self.vsTeam] &&
attempt.isHomeTeam == self.isHomeTeam &&
[attempt.hitlessInnings isEqualToNumber:self.hitlessInnings] &&
... и т.д.
return result;
Иногда какие-либо из этих свойств может быть нулевым , Когда строка равна нулю, равенство, похоже, работает должным образом. Но isEqualToNumber
для NSNumber
объектов не удается полностью:
[NSNull isEqualToNumber:]: unrecognized selector sent to instance 0x1896678'
Как я могу проверить на ноль в isEqual
и вернуть YES
, когда оба объекта имеют ноль для этого свойства?
В этом случае вы не проверяете 'nil', вы проверяете, действительно ли объект является экземпляром' NSNull' вместо экземпляра 'NSNumber'. – rmaddy
Ваша проблема в том, что вы не вызываете isEqualToNumber: в NSNumber это экземпляр NSNull. Моя рекомендация заключается в том, что везде, где вы получаете этот NSNull (разбор некоторых JSON или что-то еще?), Проверьте свою собственность для NSNull и измените ее на нуль. (например: 'if (попытка.hitlessInnings == [NSNull null]) {try.hitlessInnings = nil;}' Или использовать предложение rmaddy. –
Да, я разбираю JSON - я вижу, поэтому, если я проверяю NSNull при настройке номер, и при необходимости установить значение nil, я могу оставить эту реализацию isEqual as-is? –