いくつかの NSString オブジェクト、いくつかの int、いくつかの bool を含むカスタム オブジェクトがあります。NSKeyedArchiver を使用して、オブジェクトのコピーを NSData オブジェクトにアーカイブしています。
ユーザーは、IB インターフェイスに接続されているオブジェクト変数を変更します。
変更が行われた後、オブジェクトの新しいバージョンが 2 番目の NSData オブジェクトにアーカイブされます。
これらの 2 つのオブジェクトは、次を使用して比較されます。
[myNSData1 isEqualToData: myNSData2];
ほとんどの場合、問題なく動作しますが、非常に厄介な状況が 1 つあります。
オブジェクトに次のように初期化された変数があるとします。
NSString *myString = @"";
オブジェクトが myNSData1 にアーカイブされた後、以下を呼び出しました。
myString = [myNSTextField stringValue];
myString をコンソールに記録すると、myString の値がまだ
@""
したがって、値は変更されていません。
オブジェクトを myNSData2 にアーカイブします。
ただし、上記の比較ステートメントを実行すると、FALSE が返されるようになりました。@"" の元の割り当てが、stringValue を使用してテキストフィールドに含まれる @"" に置き換えられた場合にのみ、FALSE を返します。
どうしてこれなの?