0

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

...ETC

return result;

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

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

当两个对象都具有该属性的 nil 时,如何测试 nil inisEqual并返回?YES

4

1 回答 1

1

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

  1. 首先检查被比较对象的类
  2. 检查本地对象和比较对象属性nil
  3. 检查本地对象和比较对象属性是否相等

如果您被传递NSNull而不是,nil那是您的 JSON 处理和验证中的错误,需要修复。您还需要nil明确检查案例nil == nil是否为真但[nil isEqual:nil]是否为假。

于 2013-08-02T23:01:16.797 回答