1

私は大量のデータを必要とするモバイルアプリに取り組んでいます。簡単に言えば、データは複数の言語用であり、その言語で可能なすべての単語で構成されます。アプリは、英語と多くの単語だけで始まります。その後、ユーザーは他の言語とそのデータをダウンロードすることを選択できます。

このデータを読み取り/保存/更新する最良の方法を見つけようとしています。最初に英語のデータを含む plist ファイルを作成し、ユーザーが新しい言語をダウンロードするたびにデータを追加し続ける必要がありますか? それとも、すべてのデータを nsuserdefaults に保存する必要がありますか? それとも、すべてのデータを含むテキスト ファイルを含めて、その場で解析する必要がありますか?

提案?

ps: これはモバイル アプリであるため、ファイル容量と解析時間を考慮する必要があることを理解しています。

4

4 に答える 4

1

SQL データベースを直接使用するか、Core Data を使用することをお勧めします。大量のデータがある場合、常にそのデータを完全にメモリにロードすることは望ましくありません。また、データの更新、変更、または追加の処理も容易になります。

しかし、あなたの質問は非常に一般的であり、データで実際に何をしたいのか、データがキロバイトまたはメガバイトでどれくらい大きいかについては何も伝えていません。良い答えを出すのは難しいです。

多くのデータをテキスト ファイル、ユーザー デフォルト、plist などに書き込むことは、適切な選択ではないようです。Core Data を使用することは、iOS でそのようなことを行うためのデフォルトの方法です。

于 2012-07-23T23:42:15.827 に答える
1

最も簡単な方法は、 でデータを処理し、NSMutableArrayを使用してアプリケーション内に保存することですNSUserDefaults

NSMutableArray次のように、内でデータを処理できます。

NSMutableArray *yourDataStuff = [[NSMutableArray alloc] init];
[yourDataStuff addObject:@"Your data 1"];
[yourDataStuff addObject:@"Your data 2"];
[yourDataStuff addObject:@"Your data 3, etc.."];

NSUserDefaults次に、次のように を使用して保存できます。

[[NSUserDefaults standardUserDefaults] setObject:yourDataStuff forKey:@"myData"];

そして、次のようにデータを読み取ります。

yourDataStuff = [[NSUserDefaults standardUserDefaults] objectForKey:@"myData"];
于 2012-07-23T23:52:22.527 に答える
1

ここで私の答えを読んでください: https://stackoverflow.com/a/7215501/832065

その回答で述べたように、すべての NSUserDefaults は 1 つの plist にまとめて保存されます。

plist と NSUserDefaults は基本的に同じですが、NSUserDefaults は環境設定の保存にのみ使用し、大量のデータには使用しないでください。したがって、NSUserDefaults を使用しないでください。

これを plist (NSDictionary) に保存することを検討します。このように、そのファイルですべてのデータを並べ替えることができます。「単語」(私が想定する NSString )をオブジェクトとして、言語をキーとして設定するだけです。

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
[dict setObject:words forKey:language];
[dict writeToFile:filePath atomically:YES];

読むのと同じ:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSString *words = [dict objectForKey:language];

編集:

各単語が数値に割り当てられている場合 (NSArray を使用できます)、それほど違いはありません。

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
NSArray *words = [NSArray arrayWithObjects:allTheWords,nil];
[dict setObject:words forKey:language];
[dict writeToFile:filePath atomically:YES];

読むのと同じ:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSArray *words = [dict objectForKey:language];
NSString *word = [words objectAtIndex:numberAssignedToWord];

これが役立つことを願っています!:)

于 2012-07-23T22:18:43.113 に答える
0

NSUserDefault に大きなデータを保存することはできず、おそらく plist で IO を実行できないと思います。これを行った場合、読み取りまたは保存するときに、.plist 全体を読み取る必要があります。メモリの警告が表示されるか、クラッシュする可能性があります。 . C (fread,fwrite) を使用して .txt にデータを書き込むことができ、データ ストリームを使用して読み書きすることができます。

于 2012-07-23T23:33:09.383 に答える