NSArray或NSDictionary用于存储在UserDefaults中?

时间:2011-11-29 10:42:59

标签: objective-c ios nsarray nsdictionary

我收集了当前存储在NSArray中的usertype新闻。我必须将它们存储在UserDefaults中以将它们保存在设备上。新闻有一个独特的属性ID。在将它们存储到UserDefaults之前,我将NSArray转换为NSDictionary,其中键是ID,该键的对象是新闻。这是存储它们的好方法吗?

选择NSDictionary的原因是,每当我从Web服务重新下载新闻时,都能够检查新闻列表中是否存在具有特定ID的新闻。这样我每个新闻ID只有一个新闻实例。我认为使用普通的NSArray很难管理 - 或者我错过了什么?

2 个答案:

答案 0 :(得分:4)

  

我必须将它们存储在UserDefaults中以将它们保存在设备上。

UserDefaults用于存储首选项,设置和其他“小”信息,它们不用于存储应用程序数据。您没有“使用”NSUserDefaults,还有许多其他选项可供您使用。以原始格式写入文件(在文档目录中)或使用NSKeyedArchiver / NSKeyedUnarchiver编写。

您可以像这样获取文档目录路径

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

除了将带有新闻ID的NSDictionary存储为密钥之外,还可以。我没有真正意识到有一个NSArray并将其“转换”为NSDictionary,使用其中一个(这样你总是确保每个项目只有一个新闻)。

答案 1 :(得分:1)

NSUserDefaults不是数据库,但您已经知道了。

无论如何,我直接存储数组,并将最后看到的新闻ID保存为单独的首选项。然后,您只需要处理ID大于上次看到的项目的新闻项目。下载新闻时,您需要更新新闻和上次看到的ID。您需要保证ID按升序排列。

根据您对新闻的特定使用,一种不同的方法是保存两个数组,一个包含新闻项,另一个包含新闻ID列表。使用第二个数组来检查是否有新消息。

除非您处理大量新闻项目(在这种情况下您应该使用Core Data),否则您正在优化不需要优化的内容。读取,排序,更新和将小数组保存到NSUserDefaults非常快。