我正在开发一款需要大量数据的移动应用。简而言之,数据将用于多种语言,并包含该语言可能的所有单词。该应用程序将从只有英语和很多单词开始。然后,用户可以选择下载更多语言及其数据。
我试图找出读取/保存/更新此数据的最佳方法。我应该创建一个包含英文数据的plist文件,并在用户下载新语言时不断添加更多数据吗?或者我应该保存nsuserdefaults中的所有数据?或者,我是否应该只包含一个包含所有数据的文本文件并动态解析它?
建议?
ps:我知道因为这是一个移动应用程序,所以必须考虑文件空间和解析时间
答案 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中写入数据,并且可以使用数据流进行读写。