将数据持久存储在iOS应用中

时间:2015-01-10 14:05:18

标签: ios objective-c iphone swift ios8

我有一个相当普遍的问题。我制作了一个使用大单词列表的应用程序。这些单词与源代码一起存储在文本文件中。在应用程序的初始启动时,我使用文本文件中的单词填充数据对象。然后,此数据对象将用于每个新启动,因为它是持久的,并且文本文件永远不会再次使用。

我认为这个解决方案说实话有点怪异。是否可以使用内置iOS功能预先填充/预编译这样的数据对象?我正在考虑使用.sqlite文件,该文件在第一次启动时已经存储了所有数据,就像我使用过的任何其他语言一样。

欢迎所有答案!

2 个答案:

答案 0 :(得分:1)

正如其他人所说,有很多不同的方法可以解决这个问题。

我所做的是创建一个Mac程序,打开文本文件,将其转换为数组,然后将数组保存为二进制 plist。二进制plist比基于文本的plist更快,存储效率更高。然后我将plist添加到我的iOS项目中,这就是我在启动时阅读的内容。

您可以轻松地从iOS项目进行转换。

请查看 NSPropertyListSerialization 类,了解有关创建二进制plist的信息,特别是kCFPropertyListBinaryFormat_v1_0参数的format值。 -dataWithPropertyList:format:options:error:方法。

如果您需要快速索引搜索单词列表,那么另一种存储格式(如SQL)可能是更好的选择,但您可以在开发过程中将文本转换为您想要的任何目标格式并包含转换后的文件在你的项目中。

答案 1 :(得分:-1)

我建议您使用NSUserDefaults。您应该使用您需要的值存储NSArray或NSDictionary。在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions上,您可以添加:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if([userDefaults objectForKey:@"wordsData"] == nil){
    //This means this is the first time the user opens the app. Create defaults.
    //Create a dictionary or an array with the words.
    NSDictionary *wordsDictionary = <my dictionary>; 
    [userDefaults setObject:wordsDictionary forKey:@"wordsData"];
    [userDefaults synchronise];
}

然后,当您需要检索它们时,请使用:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *wordsDictionary = [defaults objectForKey:@"wordsData"];

如果您需要更多NSUserDefaults,请阅读the Apple docs regarding NSUserDefaults。 注意:NSUserDefaults没有限制,但您不应该在那里保存超过512KB的数据。如果您需要的远不止这些,您应该期待NSBundle或其他存储类型。存储在NSUserDefaults上的数据会转到.plist文件,所以它不应该太大。

致以最诚挚的问候,