4

さまざまなNSStringオブジェクトと変数を含むオブジェクトがあり、NSCodingを使用してディスク上のファイルにアーカイブし、後でアーカイブを解除します。これまでのところ、すべてが完全に機能しています。

今日、私はNSMutableArrayをオブジェクトに追加したいと思い、以下を使用してエンコードしようとしました。

[encoder encodeObject:myArray ForKey:@"myArray"];

後でそれを使用してデコードします:

[self setMyArray:[decoder decodeObjectForKey:@"myArray"]];

動作していないようです。エンコードまたはデコード自体でエラーは発生しませんが、ファイルからデコードした後に配列の値を変更しようとするとエラーが発生します。

私はここで完全に間違ったことをしていると確信していますが、完全に確実なことではありません。おそらく、アーカイブ解除中に適切に割り当てられなかったことが関係しているのではないかと思います。

問題の原因として露骨に明白に見えるものはありますか?

4

1 に答える 1

10

動作していないようです。エンコードまたはデコード自体でエラーは発生しませんが、ファイルからデコードした後に配列の値を変更しようとするとエラーが発生します。

アーカイブをデコードすると、エンコード時に可変か不変かに関係なく、不変オブジェクトが得られます。あなたは特に悪いことをしていません-それは宣伝通りに働いています。

同様の問題の別の例と解決策については、この回答を参照してください。

[self setMyArray:[[decoder decodeObjectForKey:@"myArray"] mutableCopy];
于 2012-06-02T00:43:09.513 に答える