尽管围绕这个主题有很多主题,但在以下情况下我似乎非常沮丧:(
该应用程序下载并解析包含大约1000个对象的JSON,这些对象在其属性链接中包含小图像。我需要下载(一次)这些图像,存储它们并在我的TableView中用作图标。
在显示TableView时,存储大量文件并有效使用它们的最佳方法是什么?
答案 0 :(得分:1)
我会告诉你我该怎么做但是在我想给你一个警告关于从互联网上下载文件并将它们存储在你的应用程序之前。
我最近从Apple拒绝了我的一个应用程序,因为我违反了App Store Review Guidelines中的规则2.23,其中说:
2.23应用必须遵循iOS Data Storage Guidelines 或者他们将被拒绝
由于Apple最近使用的是iCloud,因此应尽量减少每个应用上传的流量,因此您的应用的“文档”文件夹中不应存储超过40MB的内容。他们还说(如果您阅读我提供的链接):
可以存储可以再次下载或重新生成的数据 / Library / Caches目录。
由于iOS可以根据需要删除缓存文件夹,因此您应该将应用程序设计为准备好再次下载图像,以防它们消失,请记住这一点。
现在我的解决方案,我认为下载1000个文件太多了(即使它们是小文件)。我建议您将文件保存在您愿意下载的服务器上的ZIP文件中,并在下载后将其解压缩到光盘上。这将更容易,更实用。您可以查看here以查看如何在您的应用中压缩和解压缩。
解压缩文件后,我建议您使用一个小型数据库(SQLite),您可以从中加载文件名,将这些名称存储在一个数组中,然后使用此数组填充表中的图像。函数cellForRowAtIndexPath
。
我希望这会对你有所帮助。顺便说一下,这是我的方式,但我不是说这是你要问的“最佳方式”:)
答案 1 :(得分:0)
鉴于您希望保持这些图像/数据的持久性,您现在有两个选择:您可以自己管理它们,也可以利用Core Data来帮助您实现这些目标。我推荐Core Data。
如果您不熟悉核心数据,可以开始阅读Here。开始使用它有点令人生畏,但是一旦你完成了tutorial,它就会非常直接,让你的生活更轻松。
如果您想自己存储图像,或者想要更高效的Core Data结构,我建议您将所有图像写入Documents目录,如Here所示。然后,您可以将文件路径字符串存储在CD结构中,也可以在plist中手动存储,如This。
最后,要将它们加载到TableView中,您可以使用这些存储的图像路径来加载UIImages:
[[UIImage alloc] initWithContentsOfFile:filePath];
这将放在你的:
中 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
功能,以便您可以将图像设置在您想要的位置。