我有一个展示绘画的应用程序,绘画的数量大约是600(那就是600 png)。客户希望我将这些图像包含在应用程序版本中,以便即使用户不在线也可以查看它们。当然,每个图像都有一些字段,如描述,画家和价格估算,所以这个应用程序不会流式传输任何内容,并且会在本地拥有所有数据。
无论如何,我正在考虑构建这个应用程序的最佳方式,我想到核心数据,甚至编码解码,但由于这些图像永远不会改变,我可以将它们放在图像文件夹中,而在viewdidload上只是循环内容的文件夹和构建我的tableviewcells。
我的问题是:
1:这是一个很好的架构吗?
2:我需要将这些图像与它们的相关描述相关联吗?这是最好的方式吗?如果我跳进核心数据并创建模型,我觉得这将是一种过度杀伤。
请记住,这些图像永远不会改变,数据也不会更新。
感谢。
答案 0 :(得分:2)
有几点想法:
正如your other question中所讨论的,我认为在应用中加载所有这些图片都有其缺点,因为你说应用最终会达到300mb。如果它确实会超过50mb,那么我想你可能想要试图阻止你的客户坚持所有的图像都包含在应用程序中。我知道您可能无法说服他们,但至少要确保他们理解包含所有这些图片的含义(这使得安装应用程序变得更加困难,因此他们的新版本可能会降低其采用率应用程序)。
在Core Data中存储图像的相关描述是一种很好的方法。您也可以使用SQLite(例如,通过FMDB包装器),但我真的鼓励您只使用Core Data,除非您有其他一些您未与我们分享的注意事项。但是许多其他用于简化持久性数据的传统解决方案(plist,NSUserDefaults
等)可能不适合这么多记录。核心数据非常棒,并不是那么复杂。当然,第一次使用Core Data时,需要稍微习惯,但它似乎非常适合这些数据。
您谈到图像的“编码和解码”,并且您没有描述任何会导致我们建议这种过程的内容。你在考虑什么编码/解码?将图像存储在本地文件系统中可能更容易(如果你在飞行中下载图像的话,可以在应用程序中包含在其他地方in the file system中)。
你提到你可能只有“viewDidLoad
循环遍历文件夹的内容并构建我的tableviewcells”。也许我正在阅读太多内容(结合您的其他问题关于接收内存警告的评论),但鉴于您正在讨论将图像描述保留在Core Data中,您不需要在{ {1}}。您的UITableViewDataSource
方法将只查询Core Data数据库并显示相应的信息。我认为没有必要在viewDidLoad
中迭代任何内容。
答案 1 :(得分:1)
我前段时间做了类似的应用程序。我为图像使用了唯一的代码名称,并创建了一个Core Data DB,它将有一列将相应的数据行(描述,作者,...)与图像的“代码”名称相关联(即2347.png)
我的模型很简单:
NSNumber *imageCode // the number that you would use to associate to your images
NSString *name
NSString *author
NSString *description
我假设你知道如何使用核心数据..如果你不知道,你可以参考这个网站:Core Data on iOS 5 Tutorial: Getting Started ..这真的很有帮助!