所以我的iOS应用程序刚被拒绝,因为它在SQLite数据库中存储了太多非用户创建的数据,该数据库位于Documents文件夹中。
该应用程序基本上涉及一个相对较大的图像库 - 大约60或者几兆字节的图像开始,并且还有应用内购买,每个都添加额外的60左右的图像。此外,用户可以将自己的图像添加到库中。
现在所有内容(图像和所有内容)都存储在SQLite数据库中,该数据库是在首次启动应用程序时生成的。当用户添加更多图像或购买图像包时,这些图像将添加到数据库中。对于用户来说,所有图像(用户生成与否)在应用程序中表现相同。
但Apple不允许这样做:我不能将所有数据存储在Documents文件夹中的SQLite数据库中,除非我特意设置它不要备份到iCloud,因为它是所有可恢复的数据。
但如果我将其设置为不备份,则用户生成的数据也不会备份,我绝对不想要。
任何建议我如何"分手"数据库,所有用户生成的东西都可以备份,但包含或购买的东西不是?
答案 0 :(得分:4)
您被拒绝的原因不在于Data Storage Guidelines。用户创建或编辑的数据属于NSDocumentsDirectory
,而应用程序数据应存储在其他位置(即应用程序支持目录)。这些要求是iCloud备份和磁盘空间清除如何在iOS上工作的结果。
对于Core Data应用程序,这意味着您的持久存储必须在两个不同的位置拆分为两组不同的文件。反过来,这最终会驱动大部分应用程序架构和数据模型。例如,要在用户数据和应用程序数据之间建立关系,必须使用两种不同的托管对象模型配置,并且关系必须是获取的属性。
有关如何在this answer中实现此功能的详细信息。
针对您的特定情况的替代是将 images 保存在文件系统,caches目录或其他位置。用户图像可以存在于NSDocumentsDirectory
中,而应用程序图像可以存在于NSCachesDirectory
中。这将从Core Data中删除图像,而模型对象将具有文件系统上图像的路径。这将是一个短期的修复,以帮助您完成提交,并可能会有效。
答案 1 :(得分:0)
一种选择是,将数据存储到服务器并使用Web服务进行调用。首次发布时。或根据要求。