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] &&

...等

return result;

場合によっては、これらのプロパティのいずれかが nil になることがあります。文字列が nil の場合、等価性は期待どおりに機能するように見えます。しかしisEqualToNumberNSNumberオブジェクトの場合は完全に失敗します:

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

両方のオブジェクトがそのプロパティに対して nil を持っている場合、 nil をテストしisEqualて返すにはどうすればよいですか?YES

4

1 に答える 1

1

一般に、等価メソッドを作成するときは、次のことを行う必要があります。

  1. 最初に比較されるオブジェクトのクラスを確認してください
  2. ローカル オブジェクトと比較対象オブジェクトのプロパティを確認してくださいnil
  3. ローカル オブジェクトと比較されたオブジェクトのプロパティが等しいことを確認してください

NSNull代わりに渡される場合はnil、JSON の処理と検証のエラーであり、修正する必要があります。true であるが false であるため、nilケースを明示的にチェックする必要もあります。nil == nil[nil isEqual:nil]

于 2013-08-02T23:01:16.797 に答える