【问题标题】:What is the main difference between using [NSFileManager URLForUbiquityContainerIdentifier:] and [NSFileManager ubiquityIdentityToken]?使用 [NSFileManager URLForUbiquityContainerIdentifier:] 和 [NSFileManager ubiquityIdentityToken] 的主要区别是什么?
【发布时间】:2012-11-26 02:19:35
【问题描述】:

我正在尝试将 iCloud 支持添加到我的应用程序中,并且一直在关注 Apple 自己的 iCloud Design Guide。该指南说我应该通过调用[NSFileManager ubiquityIdentityToken] 来检查用户凭据。它还说我应该检查[NSFileManager URLForUbiquityContainerIdentifier:] 以使应用程序的无处不在的容器可用。

我遇到的问题是 ubiquityIdentityToken 返回 nilURLForUbiquityContainerIdentifier: 不是。因为后者返回了正确的 URL,所以我假设我的配置文件和权利设置正确。我还仔细检查了运行应用程序的设备是否启用了 iCloud,它已登录并启用了文档和数据。

为什么一种方法暗示没有 iCloud 连接而另一种方法暗示没有 iCloud 连接?

更新: 我注意到,如果我调用ubiquityIdentityToken,如果我在调用URLForUbiquityContainerIdentifier: 之后调用它,它会返回一个值。不过,如果我的应用使用键值对存储而不是无处不在的容器,ubiquityIdentityToken 将如何工作?

【问题讨论】:

    标签: ios icloud nsfilemanager


    【解决方案1】:

    ubiquityIdentityToken 是 Apple 引入的一个新东西,允许应用程序检查用户是否登录到 icloud。这是一种非常快速的方法,可以确定同一用户是否在应用激活之间登录/用户是否实际登录等。

    它可以在主线程上运行,而且速度极快。这将允许您对您的应用逻辑做出决定。

    需要注意的关键是它可以在主线程上运行,而且速度极快。

    您通常会获取此令牌,将其存储在您的应用中,然后在您的应用从后台返回时再次进行比较。

    这样,您可以确保它是同一用户等。

    如果返回 nil,则表示用户未登录 iCloud。

    之前检查用户是否登录,有一个单独的调用,但您必须在另一个线程上异步运行它。我想,他们看到了用户登录 iCloud、暂停他们的应用程序、登录另一个帐户并返回您的应用程序的情况。这将使您能够非常有效且轻松地检查这些内容。该令牌没有任何用户身份信息。

    【讨论】:

    • 问题是我 am 登录了 iCloud,但该方法仍然返回 nil。除非,也就是说,我先打电话给URLForUbiquityContainerIdentifier:。这对我来说没有意义,尤其是因为我实际上并不希望我的应用程序使用无处不在的容器;它将完全依赖NSUbiquitousKeyValueStore
    • 好的,所以......不知何故,它开始工作而无需对代码进行任何更改-_-。我使用不同的帐户登录和退出 iOS,然后它就可以工作了。谢谢你的解释。
    • 我遇到了同样的行为,即使我正确设置了iCloud Documents 并且我登录了 iCloud,我从NSFileManager.defaultManager().ubiquityIdentityToken 得到一个 nil,奇怪
    • 查看答案:stackoverflow.com/questions/17058027/… -- 正如 Weischel 所说:“与移动文档相反,应将键值存储视为始终有效可用。”因此,如果您仅将 iCloud 用于其 NSUbiquitousKeyValueStore,则 ubiquityIdentityToken 不适用。
    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 2011-06-29
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2012-06-13
    • 2015-05-29
    相关资源
    最近更新 更多