【问题标题】:coredata sqlite location, Library/Application Support and iCloudcoredata sqlite 位置、库/应用程序支持和 iCloud
【发布时间】:2013-08-01 06:07:14
【问题描述】:

我们最近在审核过程中因以下问题被拒绝:

===========

2.23

我们仍然发现您的应用没有遵循 iOS 数据存储 指南,这是 App Store 审核指南所要求的。

特别是,我们发现在发布和/或内容下载时,您的 应用程序将非用户生成的内容存储在 iCloud 备份目录中, 这是不合适的。要检查您的应用存储了多少数据:

  • 安装并启动您的应用
  • 转到设置> iCloud > 存储和备份> 管理存储
  • 如有必要,请点按“显示所有应用”
  • 检查应用的存储空间

iOS 数据存储指南指出,只有 用户使用您的应用创建,例如文档、新文件、编辑等, 应由 iCloud 备份。

您的应用使用的临时文件应仅存储在 /tmp 目录;请记住删除存储在此位置的文件 当用户退出应用时。

可以重新创建但必须保留才能正常运行的数据 您的应用 - 或者因为客户希望它可以离线使用 使用 - 应标有“不备份”属性。对于 NSURL 对象,添加 NSURLIsExcludedFromBackupKey 属性以防止 相应的文件被备份。对于 CFURLRef 对象,使用 对应的 kCFURLIsExcludedFromBackupKey 属性。

===========

我们的(仅限 iOS 6)应用包含用户收藏的汽车。

我们希望在此集合中预先填充一系列经典汽车,他们可以在应用中随意删除或编辑这些汽车。整个汽车数据库,包括用户创建的和预加载的条目,都应该备份到 iCloud。

目前,每辆汽车,无论是由用户创建还是由初始集合之一创建,都存储在 /Library/Application Support/com.company.appname/DataModel.sqlite 中,据我所知,它已备份到 iCloud。汽车条目有一个图像文件,该文件与 sqlite 数据库文件保存在同一目录中。

然后使用 fetchedresultscontroller 和标准核心数据代码在 tableview 中显示汽车。

这里是一些相关文档。

https://developer.apple.com/icloud/documentation/data-storage/

https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html%23//apple_ref/doc/uid/TP40007072-CH8-SW8

通读这些内容后,如果我们有一个需要备份但必须以预加载的、用户可修改/可删除的项目开头的数据库,如何遵守这些指南仍不清楚?

【问题讨论】:

    标签: ios core-data ios6 icloud


    【解决方案1】:

    为种子数据使用单独的持久存储。仅备份用户修改过的种子车。

    这真的很容易做到。看看最近 WWDC 2013 上的苹果示例。这种情况是苹果发明NSPersistentStoreCoordinator 的原因。

    您可以引入另一个属性来指示条目是否为“种子”(一旦它被编辑并将其复制到其他商店,您将其设置为 false)。

    【讨论】:

    • 嗨 Mundi - 你能指出你正在谈论的例子的方向吗?它不会跳出来看着我查看会议视频...也许我看不到 :)
    • 我查看了“Core Data 和 iCloud 的新功能”。此外,相关的示例代码是 SharedCoreData。您可以忽略 iCloud 部分并查看 cloudStore(带有或不带有 iCloud 的普通核心数据存储)和 localStore 的设置。
    猜你喜欢
    • 2013-04-23
    • 1970-01-01
    • 2014-12-26
    • 2011-10-23
    • 2012-02-11
    • 2014-08-09
    • 2016-04-17
    • 2013-06-08
    相关资源
    最近更新 更多