我有一对应用程序,一个用于iOS,一个用于OS X,通过CloudKit私有数据库和iCloud键值存储共享数据(如果用户选择),他已登录并且iCloud Data&我的应用程序启用了文档,一开始就启用或禁用了iCloud,一切正常。
在iOS方面,我可以使用Settings
中的ubiquityIdentityToken
和来自URLForUbiquityContainerIdentifier("iCloud.my.default.container.for.osx")
的{{1}}检测用户选择,以检测用户是否已登录以及是否已启用数据和放大器;文档和它们在预期时为NSFileManager
:当它们不是CloudKit也不是Key-Value存储时(如预期的那样)。
在应用程序运行时更改这两个设置时,它会终止,因此我可以在再次打开时检查更改,所以没问题。当我在OS X上测试相同的代码时,我发现如果我关闭Data& nil
应用程序中的文档没有被杀死,但我想这是预期的行为,但即使我使用
System Preferences
我的应用未收到通知。如果我手动检查iCloud可用性,即通过重新启动应用程序,我发现NSNotificationCenter.defaultCenter().addObserver(self, selector: "checkiCloud:", name: NSUbiquityIdentityDidChangeNotification, object: nil)
不是ubiquityIdentityToken
而且这是正确的,因为我已登录iCloud,但即使nil
也不是{{1}这不是我所期待的。
这是OS X上的预期行为吗?如果是这样,我如何检查iCloud是否被禁用并在发生变化时收到通知?或者这是一个错误(我正在测试El Capitan)?
更新:一起禁用iCloud Drive会使通知触发,URLForUbiquityContainerIdentifier("iCloud.my.default.container.for.osx")
返回nil
,所以我猜这是一个错误。
更新:我向Apple提交了一份Bug报告:#22973458
答案 0 :(得分:0)
如果您要构建基于文档的OS X应用程序,则可以使用
if ([[NSFileManager defaultManager] ubiquityIdentityToken])
//iCloud Drive is enabled
检查是否为设备启用了iCloud Drive。