如果用户从iCloud帐户切换文档和数据,则退出

时间:2013-05-30 07:41:38

标签: iphone ios ipad core-data icloud

再次陷入iCloud :(。我正在使用Core Data + iCloud,在我的应用程序中,我想知道用户是否关闭了他的帐户中的文档和数据。 感谢

2 个答案:

答案 0 :(得分:2)

没有内置支持来检测此更改,仅用于检测用户是否已注销。一种常见的方法是将一个sentinel文件写入iCloud,与Core Data分开,然后监视该文件以查看它是否消失。细节有所不同,但通常是这样的:

  1. 使用NSFileManager iCloud调用编写文件,并将文件名存储在用户默认值中。使用该帐户的每个设备都会有不同的文件,因此在文件名中包含UUID是个不错的主意。你只写这个文件,你永远不会改变它。

  2. 使用NSFilePresenterNSMetadataQuery通知该文件的更改 - 如果它已消失。

  3. 如果文件消失,请立即执行卸载整个Core Data堆栈的步骤,包括每个托管对象,因为它们没有持久存储来备份它们。

    一个示例实现位于Black Pixel's version of the Core Data "Recipes" demo app。您可能需要调整它以使其在您的代码中正常工作。

答案 1 :(得分:1)

有两种情况:

  1. 应用程序未运行,或在帐户状态更改时在后台运行。
  2. 此处的解决方案是使用NSUserDefaults(或应用程序本地的其他一些存储)来存储/比较身份令牌。从NSFileManager获取身份令牌,并在每次应用程序完成启动或返回前台时将其与缓存值进行比较。

    id token = [[NSFileManager defaultManager] ubiquityIdentityToken];
    
    1. 帐户更改时,该应用正在运行。
    2. 这需要一个文件展示器来容器内的“东西”。最佳解决方案是使用同步的文件。

      实现-accommodatePresentedItemDeletionWithCompletionHandler:生成一个线程(dispatch_async效果很好)并进行清理工作。