0

私のコードではvalueForKey、空のNSDictionaryオブジェクトを呼び出しましたが、アプリケーションがクラッシュしたことに気づきました。しかし、私が知る限り、メッセージが空のオブジェクトに送信されても​​、アプリケーションはクラッシュしません。誰かが私がここで矛盾を説明するのを手伝ってもらえますか?どうもありがとうございます。

これが私のコードです:

if ([[storedManagedObject valueForKey:@"objectId"] isEqualToString:[record valueForKey:@"objectId"]]) {
    [self updateManagedObject:[storedRecords objectAtIndex:currentIndex] withRecord:record];
} else {
    [self newManagedObjectWithClassName:className forRecord:record];
}

一部のシナリオでは、storedManagedObjectオブジェクトはnilです。

4

1 に答える 1

1

isEqualToString比較する前に値を型チェックするため、クラッシュが発生しています。代わりに使用isEqualすると、nil パラメータを渡したときの動作は、期待どおりになります。

if ([[storedManagedObject valueForKey:@"objectId"] isEqual:[record valueForKey:@"objectId"]]) {

ココアのドキュメントを参照してください:

isEqualToType:Cocoa フレームワークのすべてのメソッドで、nilは有効なパラメーターではなく、これらのメソッドの実装はnil. ただし、下位互換性のため isEqual:に、Cocoa フレームワークのメソッドは を受け入れnil、 を返しNOます。

于 2013-02-10T00:32:11.563 に答える