1

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

4

2 回答 2

2

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

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

  2. 使用NSFilePresenterNSMetadataQuery获取有关该文件更改的通知 - 例如,如果它消失了。

如果文件消失,立即采取措施卸载整个 Core Data 堆栈,包括每个托管对象,因为它们不再有持久存储来备份它们。

一个示例实现是在Black Pixel 的 Core Data “Recipes”演示应用程序版本中。您可能需要对其进行调整以使其在您的代码中正常工作。

于 2013-05-30T15:48:29.793 回答
1

有两种情况:

  1. 应用程序未运行,或在帐户状态更改时处于后台。

这里的解决方案是使用 NSUserDefaults(或应用程序本地的一些其他存储)存储/比较身份令牌。每次应用程序完成启动或返回前台时,从 NSFileManager 获取身份令牌并将其与缓存值进行比较。

id token = [[NSFileManager defaultManager] ubiquityIdentityToken];
  1. 帐户更改时应用程序正在运行。

这需要一个文件展示者在容器内“做某事”。最好的解决方案是使用同步的文件。

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

于 2013-06-03T09:10:35.033 回答