2015-10-05 85 views
0

我有一对应用程序,一个用于iOS,一个用于OS X,通过CloudKit专用数据库和iCloud键值存储共享数据,如果用户选择,他已登录,并且iCloud数据&文档为我的应用程序启用,并且在一开始就启用或禁用iCloud的情况下,它都可以正常工作。检测OS X上的iCloud可用性更改

在iOS端,我可以使用ubiquityIdentityTokenNSFileManagerURLForUbiquityContainerIdentifier("iCloud.my.default.container.for.osx")如果用户登录到检测检测用户选择在Settings应用程序,如果他启用数据&文件和他们nil预期时:当他们也不CloudKit也不是关键 - 价值商店的作品(如预期)。

在应用程序运行时更改这两个设置时,它会被终止,因此我可以在再次打开时检查更改,所以没问题。当我测试的OS XI相同的代码发现,如果我在System Preferences关闭数据&文件的应用程序不杀,但我想这是预期的行为,但即使我用听的iCloud可用性的变化

NSNotificationCenter.defaultCenter().addObserver(self, selector: "checkiCloud:", name: NSUbiquityIdentityDidChangeNotification, object: nil) 

我的应用程序没有通知。如果我手动检查iCloud的可用性,即重新启动应用程序,我发现ubiquityIdentityToken不是nil,这是正确的,因为我登录了iCloud,但即​​使URLForUbiquityContainerIdentifier("iCloud.my.default.container.for.osx")不是nil,这也不是我所期望的。

这是OS X上的预期行为吗?如果是这样,我该如何检查iCloud是否被禁用,并在发生变化时得到通知?或者这是一个错误(我正在测试El Capitan)?

UPDATE:禁用iCloud的驱动器一起进行通知消防和URLForUbiquityContainerIdentifier()回报nil,所以我想这是一个错误。

更新:我已经提交了一份bug报告给苹果:#22973458

+0

为什么'URLForUbiquityContainerIdentifier()'不是'你想要的'nil'?在'OS X'中,你应该使用'NSDocument'对象(如果你的应用程序是基于文档的话)。 –

+0

当我在我的应用程序的“系统偏好设置”中禁用数据和文档时,我仍然得到一个URL,但这只发生在OS X上。当调用'URLForUbiquityContainerIdentifier()'时,iOS上的相同操作给了我'nil'。该应用程序不是基于文档的,它使用与CloudKit保持同步的Core Data数据库。 –

+0

我相信您看到的价值可能是您的应用程序本地默认容器,不确定。您可能希望使用NSURLRelationship来通知NSUbiquityIdentityDidChangeNotification是否禁用iCloud或身份已更改。 –

回答

0

如果您正在构建基于文档的OS X应用程序,你可以使用

if ([[NSFileManager defaultManager] ubiquityIdentityToken]) 
//iCloud Drive is enabled 

检查是否iCloud中设备已启用驱动器。