Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSUbiquityIdentityDidChangeNotification和SIGKILL_Ios_Xcode_Swift_Icloud - Fatal编程技术网

Ios NSUbiquityIdentityDidChangeNotification和SIGKILL

Ios NSUbiquityIdentityDidChangeNotification和SIGKILL,ios,xcode,swift,icloud,Ios,Xcode,Swift,Icloud,Swift 1.2 Xcode 6 长时间侦听器,第一次调用 你好, 直截了当地说:“要处理iCloud可用性的更改,请注册以接收NSUbiquityIdentityDidChangeNotification通知。” 以下是他们为实现这一点提供的代码: [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (iCloudAccountAvailabilityChanged:)

Swift 1.2 Xcode 6

长时间侦听器,第一次调用

你好,

直截了当地说:“要处理iCloud可用性的更改,请注册以接收NSUbiquityIdentityDidChangeNotification通知。”

以下是他们为实现这一点提供的代码:

[[NSNotificationCenter defaultCenter]

addObserver: self

   selector: @selector (iCloudAccountAvailabilityChanged:)

       name: NSUbiquityIdentityDidChangeNotification

     object: nil];
我在我的应用程序中快速切换到:

var observer = NSNotificationCenter.defaultCenter().addObserverForName
(NSUbiquityIdentityDidChangeNotification, object: nil, queue: NSOperationQueue.mainQueue()
){...completion block...}
src:

正确的方法是什么?它在AppDelegate中吗?当应用程序被发送到后台时,我们是否删除观察者

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

您如何订阅此通知?如果您不订阅,您将如何跟踪当前登录的iCloud用户


谢谢大家!

我发现了同样的问题,请参阅以获取我的评论

总结一下:在iOS上,我认为当iCloud帐户发生变化(或刚刚注销)时,应用程序会被终止。因此,无需收听
NSUbiquityIdentityDidChangeNotification

但是,如果您在tvOS上,您的应用程序不会被终止。当您的应用程序处于活动状态时,您确实会收到一个或多个
nsubiquitouskeyvaluestoredidchangeinternallynotification
,其中
NSUbiquitousKeyValueStoreChangeReasonKey
设置为
NSUbiquitousKeyValueStoreAccountChange
,因为tvOS会交换您的整个ubiquity键值存储

也许你可以使用一些技巧来检测帐户更改,例如在ubiquity键值存储中存储
nsuid
,当值更改时,这意味着有一个新帐户。但您无法检测帐户是否已注销。

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

长话短说 我也一直在努力让它发挥作用。我记得在第16次世界大战期间的一次会谈中,他们建议使用类似的东西。然而,从他们提供的示例代码中,我只能找到
nsubiquitykeyidentititychanged
,但我无法找到它

于是我又回到了学校。这就是我看到他们提到的
CKAccountChangedNotification
——它的工作原理与预期完全一致:

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

    • Swift 3.0中还有另一个更名:

      现在,
      NSUbiquityIdentityDidChangeNotification
      已更改为
      NSNotification.Name.NSUbiquityIdentityDidChange

      因此,完整注册如下所示:

      // Register for iCloud availability changes
      NotificationCenter.default.addObserver(self, selector: #selector(...), name: NSNotification.Name.NSUbiquityIdentityDidChange, object: nil)
      

      在iOS 10上,我发现从未发送过
      NSUbiquityIdentityDidChangeNotification
      。如果我有一个CKContainer(根据文档),
      CKAccountChangedNotification
      是在非常有限的情况下发送的

      使用xCode 9.1构建,然后在iOS 10.02 iPhone 6+和iOS 11.0.3 iPhone SE上测试

      CKAccountChangedNotification已发送,如果

      • 用户登录到iCloud帐户,或
      • iOS 11中用户启用的iCloud驱动器。这总是导致iCloud Drive->App被启用。但是,获取帐户状态后,将生成NoAccount
      • iOS 10中支持用户的iCloud驱动器。iCloud Drive->App的后续状态与我禁用iCloud Drive时的状态相同。帐户状态是适当的。但是,如果此时禁用了iCloud Drive->App,则启用它不会产生终止或通知
      申请被终止,如果

      • 无论iCloud驱动器状态如何,用户都已注销iCloud
      • 用户禁用iCloud驱动器->应用程序
      • 用户禁用的iCloud驱动器(即使iCloud驱动器->应用程序已禁用)
      • 用户在启用iCloud Drive的情况下启动应用程序,然后启用iCloud Drive->应用程序

      为此感谢您。有太多的资源指向NSUbiquity通知,但没有足够的资源指向它。任何使用CloudKit的人都应该使用CKAccountChangedNotification。因此,当应用程序返回前台时,iOS会发送通知?@NicolasMiari是的,对我来说,在我的应用程序返回前台之前,我不会收到
      CKAccountChangedNotification
      。因此,一旦收到
      CKAccountChanged
      通知,您是否仍要检查
      FileManager.default.ubiquityIdentityToken
      以查看iCloud是否可用?或者有没有新的同步检查方法?