检查用户是否login到iCloud? 斯威夫特/ iOS版
有没有办法让我检查一下当用户打开应用程序时是否login了iCloud? 我希望能够引导他们进入设置页面,如果他们没有login,如果他们login到iCloud,并已经使用了应用程序之前 – 我想跳过login页面….
我查看了苹果的iCloud和Cloudkits文档,但无法find任何帮助! 这甚至有可能吗?
这里你去 – 希望自我解释。 欲了解更多关于下面的NSFileManager函数的Apple文档。
func isICloudContainerAvailable()->Bool { if let currentToken = NSFileManager.defaultManager().ubiquityIdentityToken { return true } else { return false } }
请参阅下面的摘录:表示当前用户的iCloud标识的不透明标记(只读)当iCloud当前可用时,此属性包含一个不透明的对象,表示当前用户的标识。 如果iCloud因任何原因不可用,或者没有login用户,则此属性的值为零。
如果您只想知道用户是否login到iCloud,则可以使用同步方法:
if NSFileManager.defaultManager().ubiquityIdentityToken != nil { print("iCloud Available") } else { print("iCloud Unavailable") }
但是,如果您想知道为什么 iCloud未启用,则可以使用asynchronous方法:
CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStatus, error) in switch accountStatus { case .available: print("iCloud Available") case .noAccount: print("No iCloud account") case .restricted: print("iCloud restricted") case .couldNotDetermine: print("Unable to determine iCloud status") } }
如果你想使用asynchronous方法,但不关心为什么,你应该检查accountStatus
是available
,而不是检查它不是noAccount
:
CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStatus, error) in if case .available = accountStatus { print("iCloud Available") } else { print("iCloud Unavailable") } }
请注意,这个答案是用Swift 3编写的。要在3以上的Swift版本中使用,请使用:
CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStatus, error) in switch accountStatus { case .Available: print("iCloud Available") case .NoAccount: print("No iCloud account") case .Restricted: print("iCloud restricted") case .CouldNotDetermine: print("Unable to determine iCloud status") } }
要么
CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStatus, error) in if case .Available = accountStatus { print("iCloud Available") } else { print("iCloud Unavailable") } }
我认为这个asynchronous方法是首选,所以你不检查时阻止。
CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStat, error) in if (accountStat == .Available) { print("iCloud is available") } else { print("iCloud is not available") } }
- 如何NSBundle pathForResource:ofType:和UIImage imageWithContentsOfFile:处理比例和设备修饰符?
- 如何打开/closures故事板中单个视图控制器的自动布局
- CloudKit删除CKReference的自选项不起作用
- 错误_BSMachError:(os / kern)在接收到CloudKitlogging添加的远程通知后无效的能力(20)
- SWIFT:我没有从我的CloudKit应用程序收到通知?
- 私有区域的CKQuery只返回来自CloudKit的前100条CKRecords
- 完整CoreData上传(备份)到iCloud驱动器,并在需要时进行恢复
- CloudKit在不同的iCloud帐户之间共享数据,但不与所有人共享
- 在不需要iCloudlogin的情况下种子和维护CloudKit公共数据库?
- 在生产环境中使用数据集debugging应用程序的任何方式?
- iOS 9 CloudKit:连接到蜂窝networking时,查询不会返回任何内容