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

时间:2012-07-23 22:05:57

标签: iphone objective-c ios cocoa ipad

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

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

建议?

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

4 个答案:

答案 0 :(得分: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];

我希望这有帮助! :)

答案 1 :(得分:1)

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

但你的问题是如此笼统,并没有告诉你实际想要对数据做什么,KByte或MByte的数据有多大,很难给出任何好的答案。

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

答案 2 :(得分: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"];

答案 3 :(得分:0)

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