NSUbiquityIdentityDidChangeNotification和SIGKILL

Kev*_*web 8 xcode ios icloud swift

Swift 1.2 Xcode 6

长期听众,第一次来电.

你好,

直接从马的口中说:"要处理iCloud可用性的变化,请注册以接收NSUbiquityIdentityDidChangeNotification通知."

以下是他们为实现此目的而提供的代码:

[[NSNotificationCenter defaultCenter]

addObserver: self

   selector: @selector (iCloudAccountAvailabilityChanged:)

       name: NSUbiquityIdentityDidChangeNotification

     object: nil];
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序中将其变为:

var observer = NSNotificationCenter.defaultCenter().addObserverForName
(NSUbiquityIdentityDidChangeNotification, object: nil, queue: NSOperationQueue.mainQueue()
){...completion block...}
Run Code Online (Sandbox Code Playgroud)

src:https://developer.apple.com/library/ios/documentation/General/Conceptual/iCloudDesignGuide/Chapters/iCloudFundametals.html#//apple_ref/doc/uid/TP40012094-CH6-SW6

实现这个的正确方法是什么?它会进入AppDelegate吗?当应用程序被发送到后台时,我们会删除观察者吗?

我遇到的问题是,当Ubiquity令牌发生变化时,无论如何都会终止应用程序,因为用户已经更改了iCloud设置.

你们如何设法订阅这个通知,如果你不这样做,你又做了什么来跟踪当前登录的iCloud用户?

谢谢!

Ant*_*y C 11

简答

要在用户使用您的应用程序时登录或退出iCloud时在iOS中收到通知,请使用CKAccountChangedNotification,而不是NSUbiquityIdentityChanged.

答案很长

我一直在尝试让这个工作.我记得在WWDC16的一次会谈中发现了一些他们建议使用的东西.但是,从他们提供的示例代码中,我只能找到NSUbiquityKeyIdentityChanged,但我无法开始工作.

所以我回到了视频(从2015年开始).这就是我看到它们引用的地方CKAccountChangedNotification- 它的工作方式完全符合预期:

  • 从Xcode在模拟器上启动您的应用程序
  • 退出模拟器上的"设置"应用
  • 登录(或退出)iCloud帐户
  • 返回您的应用程序(点击模拟器主屏幕上的图标)
    • 收到通知.
  • 再次退出到"设置"应用
  • 退回(或退出)到iCloud帐户
  • 再次返回您的应用
    • 收到另一个通知.

  • 这次真是万分感谢.有太多资源指向NSUbiquity通知,并没有足够的指向这一点.**任何使用CloudKit的人都应该使用CKAccountChangedNotification.** (3认同)