2010-12-19 13 views
4

時々変更できるオブジェクトのリストがあります。アプリケーションが閉じられたり、バックグラウンドに移動したりするたびに、永続的なキャッシュをデバイスに保存します。 リスト内のオブジェクトのほとんどは変更されないので、リストを保存する最良の方法は何か不思議でした。私は私が考える二つの主要なオプションがあります。NSKeyedArchiver/unArchiverを使用してNSKeyedArchiverは配列の一部だけを符号化します

  1. を - オブジェクトは、私は他のカスタムオブジェクトを保持するシリアル化していますので、これは、最も便利な方法であるので、この方法では、私はちょうどカスタムエンコードを書くことができますそれぞれの方法について説明します。大きな問題は、変更されたオブジェクトのみをシリアル化する方法をGoogleでは見つけられず、毎回リスト全体をシリアライズすることは非常に無駄に思えることです。

  2. SQLiteを使用する - これは私が現在使っていることですが、ここでの最悪の問題は、オブジェクトのプロパティの変更を加えることは非常に複雑で非常にエレガントです。

私はNSKeyedArchiverの便利さを楽しむことができますが、変更されたオブジェクトをシリアル化する方法はありますか?

+0

コアデータの使用を検討しましたか? NSKeyedArchiverは一度にすべてを読み出すことができます。 – koo

+0

はい、しかし、コアデータを実装することは、私のアプリと巨大な過度の大きな変化です。 – Adam

+0

まだNSKeyedArchiverを使用するのに妥当なリストのサイズに関する推奨はありますか?私のリストには約1000〜2000件のアイテムがあり、それぞれ500バイト以下です。 – Adam

答えて

0

Adam Koのように、コアデータを使用することをお勧めします。
この種の問題は、結局のところ、本当に良いことです。

あなたのキャッシュ項目は互いに独立している場合、これは単に(すなわち、アプリへのわずかな変更でコアデータから利益を得ることができる)NSManagedObjectの薄い層によってあなたのキャッシュアイテムをラップすることによって達成することができました。

このラッパーエンティティは、キャッシュアイテムのアーカイブバージョンをタイプNSBinaryDataAttributeTypeの属性に格納し、一時プロパティを使用してアーカイブされていないオブジェクトにアクセスできます。 例としてNon-Standard Persistent Attributesを参照してください。

関連する問題