保存数据 - 核心数据与 plist 文件

Posted

技术标签:

【中文标题】保存数据 - 核心数据与 plist 文件【英文标题】:Saving Data - Core Data vs plist file 【发布时间】:2012-11-28 11:25:47 【问题描述】:

我正在编写一个保存音乐专辑的 ios 应用程序(我只是为了好玩而做的一个练习)。 每张专辑都有歌手、歌曲名称、时间和图片 最终的结果将是很多具有很多细节的对象,包括附在每个对象上的图片。我是否应该考虑用 plist 做类似的事情? (图片可以存储在plist中吗?)

保存和访问这些数据的最佳方式是什么? 我是 iOS 新手,从我看过的培训视频中不推荐初学者使用 Core Data。真的是这样吗?

如果我要使用 plist,我应该为每种类型创建一个 plist,例如 rap.plist 、 rock.plist 等,还是只是一个大数据.plist?

谢谢

【问题讨论】:

是的,最好从集合类(数组和字典)开始。阅读,写作等。 【参考方案1】:

我会选择核心数据。如果您在 xcode 中创建新项目时选择了正确的模板,则可以显着减少一次性开销工作。

有了这个简单的结构,我想说模板几乎可以提供您需要的一切。只需定义您的模型和布局即可。

我会花更多时间思考这些图像。我个人从未将图像数据放入核心数据本身。我宁愿将它们存储为文件,在我的核心数据模型中,我只是存储了路径和文件名来访问它。作为文件名,我只是使用了时间戳。您可以使用一些自动增量或其他独特的 id 技术,但时间戳也可以。无论如何,它对用户是不可见的。

【讨论】:

【参考方案2】:

我认为最好的方法是使用 sqlite,因为您是 IOS 新手。将您想要的所有信息保存在本地数据库中并显示在屏幕上。

如果你的数据结构很小,你可以使用 plist。

Note that property lists should be used for data that consists primarily 
of strings and numbers. They are very inefficient when used with large blocks 
of binary data. A property list is probably the easiest to maintain, but it will be loaded into memory all at once. This could eat up a lot of the device's memory.

With Sqlite you will easily be able delete , edit, insert your data into the database. 

Core data also uses sqlite for data storage only it helps you to manage your data objects, their relationships and dependencies with minimal code.

而且由于您是新手,因此我认为核心数据不是一个好主意.. 所以我建议从普通的 sqlite 开始。将数据保存在应用的某个文件夹中,并将其路径存储在数据库中。

您不必编写不同的 plist。如果您正在使用,您可以使用相同的。

编辑:这里有一个链接可以帮助您学习 sqlite

http://www.iosdevelopment.be/sqlite-tutorial/

【讨论】:

如何在sqlite中保存信息?像在 File -> new 中创建一个 plist 文件那么简单吗? (抱歉,不在 xcode 附近) 检查编辑..我提供了一些学习sqlite的链接..它很容易..因为您的数据结构很小并且不需要管理任何数据对象及其关系,您应该使用sqlite ..【参考方案3】:

您需要更多代码来设置核心数据堆栈(存储协调器、存储、对象模型和上下文)

它有点复杂,但不应该吓跑你。 读取 plist 确实很容易,但虽然对较小的数据(如 info.plist)有好处,但它不能扩展,很快你就需要一个成熟的数据库

【讨论】:

【参考方案4】:

当您编辑原始问题时,决定现在使用 plist。 在这种情况下,我会为每个 ablum 选择一个 plist,并为专辑列表选择一个整体 plist。 当然,您可以为类别等使用更多 plist。

但是,如果您正在考虑像类别这样的数据结构,那么使用核心数据会好得多。尤其是在搜索方面。

【讨论】:

我还没有决定。 plist 部分错误地粗体显示。【参考方案5】:

似乎没有人提到 SQLLite,我会这样做,原因我在这里解释 (https://***.com/a/12619813/1104563)。希望这会有所帮助!

【讨论】:

有趣的是,我对提及 SQLLite 投了反对票,但事后接受的答案是建议使用 SQLLite... 好的,太好了!去搞清楚!哈哈【参考方案6】:

coredata 是苹果提供的持久化工具,而 plist 是 XML 文件。我认为不建议初学者使用 core data 的原因是 core data 从编程角度来看比 plist 更难。对于您的应用程序,显然核心数据更适合。但或者,您也可以使用存档文件,它位于核心数据和 plist 之间。

【讨论】:

核心数据不是一种数据库。这在任何核心数据手册/书中都有明确说明。

以上是关于保存数据 - 核心数据与 plist 文件的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 将实体保存为 pList / 字典

如何每次将新数据保存到我的 plist 文件而不是替换旧数据?

核心数据检查是不是已经保存,Swift

如何在 ios 的 Plist 文件中保存、检索、删除和更新我的数据?

无法将数据保存到 Plist 中?

转基本数据持久性 使用plist保存和读取数据