1

次のように、iPhoneアプリケーションのフォルダーにさまざまなファイルがNSArray保存されています。.datDocuments

john.dat
mary.dat
bob.dat  etc...

ファイルの数.datは不明であり、ユーザーのアプリ操作に関連するさまざまな要因に応じて増減します。

ファイルNSArray'sに保存されているこれらの内容は何ですか? .dat含まれていますNSString'scountNSArray ごとに次のように変化すると言うことが重要です。

john.dat Contains this array of strings:
"Mon, 11 Jun 2012 04:52:06 GMT",
"Tue, 12 Jun 2012 04:51:59 GMT",
"Wed, 13 Jun 2012 04:52:30 GMT",
"Thu, 07 Jun 2012 04:52:00 GMT",


mary.dat Contains this array of strings:
"Mon, 11 Jun 2012 04:52:06 GMT",
"Tue, 12 Jun 2012 04:51:59 GMT",


bob.dat Contains this array of strings:
"Mon, 11 Jun 2012 04:52:06 GMT",
"Tue, 12 Jun 2012 04:51:59 GMT",
"Wed, 13 Jun 2012 04:52:30 GMT",
"Thu, 07 Jun 2012 04:52:00 GMT",
"Fri, 08 Jun 2012 04:51:59 GMT",
"Sun, 10 Jun 2012 04:50:55 GMT"

等..

特定のイベントをユーザーに通知するために、NSStringこれらのそれぞれが変更されているかどうかを定期的に確認する必要があります。NSArray'sインターネットから XML 解析を行った後、以前にフォルダーに保存されたNSArray'sそれぞれ.datのファイルに対応する新しいものを既にメモリに保持できDocumentsます。

多くの .datファイルがあるので、私の質問は次のとおりです。

(この XML 解析の結果として) メモリ内に ある新しいなどを効率的に比較し、フォルダー内の対応する などのファイルに格納されている古いものと比較して通知するにどうすればよいです( etc... )のいずれかが変更された場合、ユーザーは?NSArray's (NSArray *john, *mary, *bobjohn.dat, mary.dat, bob.datDocumentsNSString's"Mon, 11 Jun 2012 04:52:06 GMT","Tue, 12 Jun 2012 04:51:59 GMT",

ご協力いただきありがとうございます!

4

2 に答える 2

1

.dat ファイルの形式を変更してもよければ、各配列の内容のハッシュを計算し、それをファイルの先頭に格納できます。新しいデータを取得したら、そのハッシュを計算し、それをファイルに保存されているハッシュと比較できます。

ハッシュ関数の選択によって計算効率が決まりますが、I/O は最小限に抑えられます。

于 2012-06-13T13:42:34.707 に答える
1

まあ、配列を.datファイルとして保存することに満足しているなら(私が推測しているNSKeyedArchiverを使って)、Martinの答えはおそらく最良であり、実証済みの真の比較方法です

NSDictionary私が取るかもしれないアプローチは、NSArraysの代わりに s に NSStrings を格納することです。次に、その値にオブザーバーを設定できます。そのため、比較する XML ファイルから文字列が取得されたときに、必要に応じて置換すると、ユーザーに通知できるようにオブザーバーが呼び出されます (NSNotificationCenterまだ慣れていない場合は、KVO を参照してください)。

文字列を .dat ファイルではなく CoreData に格納することも有益な場合があります (通常はそうです) NSFetchedResultsController。データを監視し、新しいデータがフェッチされたときに上記を実行するように を構成できます。

于 2012-06-13T14:28:10.303 に答える