繁体   English   中英

iOS - plist文件,nsuserdefaults或文本数据文件

[英]iOS - plist file, nsuserdefaults or text data file

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

我试图找出读取/保存/更新此数据的最佳方法。 我应该创建一个包含英文数据的plist文件,并在用户下载新语言时不断添加更多数据吗? 或者我应该保存nsuserdefaults中的所有数据? 或者,我应该只包含一个包含所有数据的文本文件并在运行中解析它吗?

建议?

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

请在此处阅读我的回答: 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];

我希望这有帮助! :)

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

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

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

我最简单的方法是处理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"];

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM