在isEqual中测试NSNumber为nil

时间:2013-08-02 22:44:53

标签: ios objective-c nsnumber nsobject

我有一个自定义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;

有时,这些属性中的任何一个都可能为零。当字符串为nil时,相等似乎按预期工作。但isEqualToNumber对象的NSNumber完全失败:

[NSNull isEqualToNumber:]: unrecognized selector sent to instance 0x1896678'

我如何在isEqual中测试nil并在两个对象的属性都为零时返回YES

1 个答案:

答案 0 :(得分:1)

通常在编写相等方法时,您应该:

  1. 首先检查要比较的对象的类
  2. 检查nil
  3. 的本地对象和比较对象属性
  4. 检查本地对象和比较的对象属性是否相等
  5. 如果您被传递NSNull而不是nil,则这是您的JSON处理和验证中的错误,需要修复。您还需要明确检查nil案例,因为nil == nil为真,但[nil isEqual:nil]为假。