应用程序因违反iCloud存储准则而被拒绝

时间:2012-06-27 08:18:06

标签: ios core-data

我的应用程序最近被拒绝了,因为它在一个目录中安装了一个数据库,该目录将备份到iCloud。由于数据库附带了大量预先填充的数据,并且应用程序将用户生成的数据存储到同一文件中。 因此,将用户生成的内容与预先填充的数据混合起来并不是Apple希望我们做的。 到目前为止一切都很好。

将我的数据库分成两部分,并使用NSURLIsExcludedFromBackupKey = YES将预先填充的数据标记为存储文件。

但是如果用户想要修改该商店中的数据会发生什么,因为他发现了失败并希望修改它。 或者我自己进行在线更新,修改该商店的值。 我该如何处理。

我是否必须删除商店文件,创建一个新文件(现在使用NSURLIsExcludedFromBackupKey = NO)或者从一开始就将数据库存储在/ tmp或/ Library / caches下并将其移入/ Application Support(支持)自动启动)但由于某些原因系统正在删除我的数据库的威胁/库/缓存是什么情况?

2 个答案:

答案 0 :(得分:2)

如果您的应用程序属于可以实际更改应用程序中预填充数据的类型,那么Apple将不允许您备份预先填充的数据,这有点令人讨厌。如果预填充的数据库很大,我可以理解他们不希望你的应用程序浪费用户的iCloud空间和AppStore中已有的信息。

伍迪对这种方法有一个很好的想法,但我不确定如果你将预先填充的数据复制到app上用户备份的数据库中,那么你实际上会浪费太多的空间启动。

这样的事情:

  • A:包含预先填充数据的数据库,未备份
  • B:添加了用户的数据库 数据,备份
  • 当用户对A中的对象进行更改时,在B中创建一个“覆盖”A中的行的新行,例如使用相同的ID或在DB中有一列告诉应用程序在A中的哪个对象应该被B中的新行替换。

每当您需要更新应用时,您都会将DB A替换为新内容,就是这样。这可能会导致与用户更改的数据发生冲突。您必须确定用户数据是否比更新的数据更重要,以及如何处理这些冲突(例如,通过尝试保留它们)。

如果您需要在更新中更改DB B的结构,例如,如果您需要添加列,则必须在应用中包含一个更新例程,用于检测用户是否具有旧版本的DB编写代码以在更新后首次启动时将用户数据迁移到新数据库。

答案 1 :(得分:0)

启动时,如果用户数据库未填充,您可以从预先填充的数据库中复制数据,并且可以为用户提供重置默认值的选项,以便再次执行相同操作?