0

次のようにJsonデータをNSDecimalNumberに解析しています

product.Price = [NSDecimalNumber decimalNumberWithDecimal:[[jProduct
objectForKey:@"Price"] decimalValue]];

これはループ内にあり、各製品が配列に追加されます。最後に、jsonオブジェクトを解放します。

product.Priceの値をループ中に記録すると、値は正しいです。ただし、アプリケーションライフサイクルの後半で、配列内の製品にアクセスして強打すると、EXC_BAD_ACCESSが取得されます。

これは、その後リリースされるjsonデータへの奇妙なポインタの問題ですか?何か案は?NSIntegersとNSStringsの値は問題ないことに注意してください。

4

1 に答える 1

1

関連するすべてのコードを表示していませんが、Priceプロパティの定義(小文字のBTWで始まる必要があります)にはretainキーワードが含まれていないと思います。その結果、からの自動解放されたオブジェクトは[NSDecimalNumber decimalNumberWithDecimal:...]単に自動解放されます:-)そして、ポインタは無効なメモリを指しています。

プロパティは、次のように宣言する必要があります。

@property(retain) NSDecimal *Price;

キーワードが欠落している場合retain、ポインタのみが保存されますが、プロパティは保持カウントを増やしません(オブジェクトに伝えてください:私があなたと一緒に終わるまであなたが留まる必要があります)。

于 2010-10-21T10:12:11.587 に答える