たとえば、この記事を読むと、NSDictionary を plist に書き込むのは非常に簡単に見えます。ここで、既存の plist の 1 行だけを変更したい場合: ファイル全体を書き直さずに行を更新する方法はありますか?
「データベーステーブルの行を更新するとき、テーブル全体を書き換える必要がない」のように?
ありがとう、J.
たとえば、この記事を読むと、NSDictionary を plist に書き込むのは非常に簡単に見えます。ここで、既存の plist の 1 行だけを変更したい場合: ファイル全体を書き直さずに行を更新する方法はありますか?
「データベーステーブルの行を更新するとき、テーブル全体を書き換える必要がない」のように?
ありがとう、J.
まず、plistは非常に些細なデータ用であるため、読み取りと書き込みの最適化の問題はありません。それを最適化する必要があるかのように、それはアプリケーションの設計を変更する必要があることを意味します。
2番目:plistは基本的にxmlファイルであるため、もちろんxmlパーサーを使用できます。
その意味はどこにありますか?
すでに述べたことにもかかわらず、XMLを使用するそのplistは少量のデータ用に設計されており、新しい値が値の長さ(XML内の文字列表現)を変更しない場合にのみ適切に機能する可能性があります、作るための掘り出し物はほとんどありません。
率直に言って、クラスター(またはiOSのファイルシステムで割り当て可能なディスクスペースの最小部分の名前)のサイズはわかりませんが、通常のplistファイルの平均サイズよりもはるかに小さいとは思いません。私が知っているすべてのファイルシステムでは、クラスターは常に一度に書き込まれます。プログラマーが1バイトを変更し、その1バイトだけをファイルに書き戻そうとしても、OSは常に完全なクラスターをディスク(またはディスクと呼んでいるもの)に書き込みます。
意味-一生懸命頑張っても、その試みからはほとんど何も得られません。もちろん、データ構造がかなり大きく、plistファイルの場合はおそらく複雑です。その場合は、すでに述べたように、使用しているデータの保存方法を変更することを検討してください。
理論的には、新しい値の文字列表現の長さが古い値と正確に同じ数の文字を占めるという条件の下で、より速く変更を行うことができます。ただし、これはマイクロ最適化の悪いケースです。テーブル全体の書き換えにかなりの時間がかかる可能性があるデータベースとは異なり、タイミングに関する限り、plist 全体の書き換えは気付かれないはずです。ファイル内の古い値を見つけて上書きするコードは、どの標準でもきれいではありません。全体を書き換える 3 行の「読み取り - 変更 - 書き込み」コード フラグメントの明快さに匹敵する可能性はありません。
これは、比較的少量のデータを格納するという意図された目的でプロパティ リストを使用していることを前提としています。中程度から大量のデータを格納するために plist を使用している場合、個々の行の更新が許可されているデータベースの使用に切り替える必要があるかもしれません。
他の答えから:
あなたが持っている:
NSMutableArray
このplistをロードするコンテナ(たとえば)テーブルビューからplistを変更するには: