0

私は非常にイライラする問題を抱えています。
NSArray をデコードした後に NSKeyedUnarchiver オブジェクトを解放しようとすると、「EXC_BAD_ACCESS」エラーが発生します。
しかし、それを解放したり、他のオブジェクト (NSString など) をデコードしたりしないと、すべてうまくいきます。
私はそれを理解していません...私にとっては、「decodeObjectForKey」メソッドが「decoder」オブジェクトの何かを変更しているように見えます(ただし、常にではありません?!)。デバッガーでは、このメソッドを呼び出した後に変更される唯一の変数は "_replacementMap" です。しかし、このバグを修正する方法がわかりません。
あなたが私を助けてくれることを願っています。
サンプルコードは次のとおりです。

+ (NSArray *)decodeArticles {
NSString *archivePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Articles.archive"];
NSData *decoderData = [[NSData alloc] initWithContentsOfFile:archivePath];
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:decoderData];

NSArray *savedArticles = [[decoder decodeObjectForKey:@"articles"] copy];
if (!savedArticles) {
    savedArticles = [[NSArray alloc] init];
}

[decoder finishDecoding];
//[decoder release];

return savedArticles;

}

4

1 に答える 1

0

さらにいくつかのこと: 1.decoderData を解放する必要があります。デコーダーの初期化後にこれを実行できるはずです。静的アナライザーがこれを指摘する必要があると思います。2. 動かしてみる [decoder finishDecoding]; [デコーダリリース]; if ブロックの前 3. 実装はクラスメソッドであるため、慣例では自動解放されたオブジェクトを返すことが推奨される場合があります。メソッドにパス引数を追加することを検討してください。4. コピーを自動リリースに変更します。5.配列内のオブジェクトは、エンコードプロセスに確実に影響を与える可能性があります。これは、一部の「標準」オブジェクトが期待どおりにエンコードおよびデコードする理由を説明する場合があります。

于 2010-10-21T04:08:39.560 に答える