わかりました、なぜ私がこれについてそんなに混乱しているのか、皆さんはすぐに指摘できると思いますが、なぜ以下がコンパイラエラーまたは警告にならないのかについて質問があります:
NSString * intValue = [ NSString stringWithFormat:@"int = %i", [ [ self.selectedObject valueForKey:name ] integerValue ] ];
selectedObjectは でありNSObject、nameたまたま@propertyタイプの の名前ですint。
私を困惑させているのは、コンパイラがの呼び出しでメッセージをチェーンするために、 の戻り結果が (型キャストせずに) 型で[ self.selectedObject valueForKey:name ]あると完全に仮定する理由です。NSNumber *integerValue
明らかに、KVC は非オブジェクトの「数値」型を にラップしますが、この特定のケースでが返されるNSNumberことをコンパイラが知る方法はありません。-valueForKey:NSNumber *
idこれにより、 「 ' ' に応答しない可能性があります」という行に沿ってコンパイラの警告が表示されないのはなぜ-integerValueですか?