对于Objective-C,实现值对数组的最有效方法是什么?

对于Objective-C,实现值对数组的最有效方法是什么?,objective-c,ios,nsuserdefaults,Objective C,Ios,Nsuserdefaults,假设我有一件物品,每件物品都附有购买日期 存储这对数据的最佳方式是什么,这样我就可以将其放入NSUserdefaults并在以后重试 谢谢当保存到NSUserDefault时,您可以使用物品的NSString形式作为键,并将购买日期作为NSDate值 但NSUserDefaults更多地用于配置,而不是作为通用数据库。使用Richard J.Ross III提到的核心数据或SQLite。您永远不知道,您的数据架构可能会发生更改,并且在这种情况下,数据库或至少文件处于有序状态时,您的数据架构可能会

假设我有一件物品,每件物品都附有购买日期

存储这对数据的最佳方式是什么,这样我就可以将其放入NSUserdefaults并在以后重试


谢谢

当保存到NSUserDefault时,您可以使用物品的NSString形式作为键,并将购买日期作为NSDate值


但NSUserDefaults更多地用于配置,而不是作为通用数据库。使用Richard J.Ross III提到的核心数据或SQLite。您永远不知道,您的数据架构可能会发生更改,并且在这种情况下,数据库或至少文件处于有序状态时,您的数据架构可能会变得更加复杂。

当保留为NSUserDefault时,您可以将项目的NSString形式用作键,将购买日期用作NSDate值

但NSUserDefaults更多地用于配置,而不是作为通用数据库。使用Richard J.Ross III提到的核心数据或SQLite。您永远不知道,您的数据模式可能会发生变化,在这种情况下,您的数据模式可能会变得更加复杂,数据库或至少文件处于有序状态。

如果项是一个相当简单的类,没有需要建模的大量关系,您可以在其上实现NSCoding,将每个项与其购买日期一起存储在词典中,将所有词典放入一个数组中,然后使用NSKeyedArchiver将阵列转换为NSData并将其写入磁盘上的文件。您甚至可以跳过实现NSCoding,并在字典中存储唯一的字符串或数字来标识条目,而不是条目,假设您没有那么多条目需要数据库

如果数据集的大小或对象的复杂度是中等到高,我同意Richard J.Ross III和Jason Fuerstenberg的观点,并推荐core data或SQLite。

如果Item是一个相当简单的类,没有太多需要建模的关系,则可以在其上实现NSCoding,将每个字典与其购买日期一起存储在字典中,将所有字典放入一个数组中,然后使用NSKeyedArchiver将数组转换为NSData并将其写入磁盘上的文件。您甚至可以跳过实现NSCoding,并在字典中存储唯一的字符串或数字来标识条目,而不是条目,假设您没有那么多条目需要数据库


如果您的数据集的大小或对象的复杂度是中等到高,我同意Richard J.Ross III和Jason Fuerstenberg的观点,并推荐core data或SQLite。

core data是最佳解决方案,它是可扩展的、易于集成的,而且非常简单@RichardJ.Rossii不得不恭敬地表示,不同意这是满足OP需求的最佳解决方案。如果您需要做的只是保留一个简短的列表,那么核心数据就是多余的,除非还有其他需求有待揭示。在NSUserDefaults中存储配置数据以外的任何内容通常都是一个坏主意。将数据序列化到磁盘,然后重新加载。核心数据是最好的解决方案,它可扩展,易于集成,而且非常简单@RichardJ.Rossii不得不恭敬地表示,不同意这是满足OP需求的最佳解决方案。如果您需要做的只是保留一个简短的列表,那么核心数据就是多余的,除非还有其他需求有待揭示。在NSUserDefaults中存储配置数据以外的任何内容通常都是一个坏主意。将数据序列化到磁盘并稍后重新加载。这是一个额外的复杂问题。如果我需要一个项目:日期:boolyes/没有三个?数据量不会很大。恩,NSUserDefaults实际上是用于小数据量的键+值式存储。一旦数据超过了,你可以考虑只使用文件和NSCORE作为下面的@ CalvaZey。你可以在文件中对整个项目进行编码,包括日期和布尔。文件名可以是一些唯一的ID(如GUID)或项目代码(如ISBN)。然后就是读/写文件的问题。如果您需要搜索功能,但您希望使用SQL方法。这是一个额外的复杂性问题。如果我需要一个项目:日期:boolyes/没有三个?数据量不会很大。恩,NSUserDefaults实际上是用于小数据量的键+值式存储。一旦数据超过了,你可以考虑只使用文件和NSCORE作为下面的@ CalvaZey。你可以在文件中对整个项目进行编码,包括日期和布尔。文件名可以是一些唯一的ID(如GUID)或项目代码(如ISBN)。然后就是读/写文件的问题。如果您需要搜索功能,尽管您希望使用SQL方法。