数据库目录问题

时间:2015-01-31 21:25:26

标签: ios sqlite

我们的应用程序因Apple的这一迹象而被拒绝:

“请确认只有用户使用您的应用创建的内容,例如文档,新文件,编辑等,才能按照iOS数据存储指南的要求由iCloud备份。另外,请检查是否有任何临时文件您的应用程序使用的只存储在/ tmp目录中;请确保在确定不再需要时删除或删除存储在此位置的文件。

可以重新创建但必须保持应用程序正常运行的数据 - 或者因为用户希望它可供脱机使用 - 应标记为“不备份”属性。对于NSURL对象,请添加NSURLIsExcludedFromBackupKey属性以防止备份相应的文件。对于CFURLRef对象,请使用相应的kCRUFLIsExcludedFromBackupKey属性。“

我们感到惊讶,因为我们的数据库位于Library根文件夹(不在Caches中),并且Documents文件夹中没有存储任何内容。那么,为什么他们引用与Documents文件夹相关的iCloud和Data Storage GuideLines?

https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW1

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您的应用程序的数据库位于库文件夹中与iCloud备份无关。据推测,您启用了iCloud。因为您只有一个数据库,所以将备份所有内容。

相反,如果您的数据库包含非特定于用户的种子数据或可下载数据,则应将其与用户数据分开。创建第二个数据库并为iCloud启用一个,另一个不启用。

话虽如此,有人认为sqlite和iCloud混合得不好,因为经常损坏的数据库文件。考虑到你的报告,这似乎是真的。

最好使用核心数据。我已经从Android应用程序中完成了许多sqlite到Core Data的迁移。在让您的Core Data与其他数据库(在线,其他移动平台)完美匹配之后,您会发现您可以编写优雅而简洁的代码,并且表现非常出色。

Apple会让您有机会发布一条简短的消息,说明您在重新提交时更改的内容。

祝你好运!