1

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

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

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

谢谢

4

6 回答 6

2

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

有了这种简单的结构,我会说模板提供了您需要的几乎所有东西。只需定义您的模型和布局即可。

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

于 2012-11-28T11:36:34.010 回答
1

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

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

于 2012-11-28T11:30:09.417 回答
1

我认为你可以做到这一点的最好方法是使用 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。如果您正在使用,您可以使用相同的 plist。

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

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

于 2012-11-28T11:44:23.423 回答
0

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

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

于 2012-11-28T11:39:42.833 回答
0

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

于 2012-11-28T11:43:27.523 回答
-2

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

于 2012-11-28T11:33:12.550 回答