2011-02-18 44 views
2

我正在研究在iPhone上存储非标准类型(字符串,int16等)的最佳方法。 我最终会做的是下载一个XML文件并存储诸如日期,标题,名称,媒体等值。我刚刚发现了coredata数据模型,我相信这将是存储此类数据的好选择,所以我不必在下次应用程序启动时下载xml。使用coredata存储/缓存非标准数据类型

我不确定的是什么限制(如有的话)我可以在实体店。例如,其中一个xml元素会将一个url保存到一小段音频(小于1mb)和一个url到图像中。将音频数据,图像作为属性存储在实体中还是应该保存到字符串和整数等等以及其他地方存储的非标准类型是否合适?

我想我真正要问的是适合缓存的数据模型吗?

最终,我正在寻求的是一种解决方案,用于将数据存储在与任何一个视图无关的位置上,还有一个我需要的所有东西的原子模型,米英寸

回答

1

的数据模型,适用于高速缓存,而是因为你没有缓存的明确控制(你可以指责一个数据对象,但它可能会留在记忆里),建议分开非常大二进制对象。将它们作为资源存储在文件系统中,并在Core Data中管理它们的链接(URL或路径)。

< 1MB的文件似乎还好由核心数据进行处理,但它也取决于你的应用程序有多少人使用。

另外,如果您确实在Core Data中存储了大文件,则应该使用SQLite存储。

+0

我同意并补充说,你应该(如果你还没有)看看苹果的核心数据编程指南。此外,要在Core Data中存储音频数据之类的内容,您需要使用NSData - 前面提到的关于大小的警告。最后,如果您确实选择将BLOB存储在核心数据中,则建议您将实际数据存储在与对象元数据不同的实体中,以避免不必要的/不想要的大量数据加载。 – westsider 2011-02-18 18:36:59

+0

感谢您的意见。我想我会看看SQLLite的东西。 – dubbeat 2011-02-21 09:20:00

1

从MHC以上答案是好的,但如果你存储不需要进行索引(不能在SQLite的反正做)大型二进制对象,推荐的方法是存储的实际数据在文件系统的某处(比如NSDocumentsDirectory中),并在Core Data实体中存储文件的路径。

核心数据加载到内存中获取对象的所有部分,这对于二进制数据实体的少数情况下可能迅速导致你在iOS设备上运行的内存。

如果它存储在文件系统中,你可以当你需要它懒加载数据。