1

我正在开发一个需要大量数据的移动应用程序。简而言之,数据将用于多种语言,并包含该语言可能出现的所有单词。该应用程序将仅以英语和很多单词开头。然后用户可以选择下载更多语言及其数据。

我正在尝试找出读取/保存/更新此数据的最佳方法。我是否应该先创建一个包含英语数据的 plist 文件,然后在用户下载新语言时继续添加更多数据?还是应该将所有数据保存在 nsuserdefaults 中?或者,我应该只包含一个包含所有数据的文本文件并即时解析它吗?

建议?

ps:我知道因为这是一个移动应用程序,所以必须考虑文件空间和解析时间

4

4 回答 4

1

请在此处阅读我的答案:https ://stackoverflow.com/a/7215501/832065

如该答案所述,所有 NSUserDefaults 都存储在一个 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 回答
1

我建议直接使用 SQL 数据库或 Core Data。如果您有大量数据,您不希望一直将这些数据完全加载到内存中。它也更容易处理数据的更新、更改或添加。

但是你的问题太笼统了,并没有说明你真正想要对数据做什么,数据有多大,以 KByte 或 MByte 为单位,很难给出任何好的答案。

将大量数据写入文本文件、用户默认值、plist 或类似的东西,似乎不是正确的选择。使用 Core Data 将是在 iOS 上执行此类操作的默认方式。

于 2012-07-23T23:42:15.827 回答
1

我认为最简单的方法是处理 a 中的数据NSMutableArray并使用NSUserDefaults.

您可以在 a 中处理您的数据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 回答
0

我认为您无法在 NSUserDefault 中保存大数据,并且您可能无法使用 plist 进行 IO,我已经这样做了,当您读取或保存时,您必须读取整个 .plist ,您可能会收到内存警告或崩溃. 您可以使用 C (fread,fwrite) 将数据写入 .txt ,并且您可以使用数据流进行读写。

于 2012-07-23T23:33:09.383 回答