0

我尝试进入userRecordID飞行模式,但出现错误,还有其他方式吗?

class func asdf() {

    var defaultContainer = CKContainer.defaultContainer()
    var publicDatabase = defaultContainer.publicCloudDatabase

    defaultContainer.fetchUserRecordIDWithCompletionHandler({ userRecordID, error in

        if error == nil {

            println("userRecordID.recordName : \(userRecordID.recordName)")
        } else {
            println("\(error.localizedDescription)")
        }
    })
}

终端:无法更新我们的安全会话

我在accountStatusWithCompletionHandler外面打了个电话fetchUserRecordIDWithCompletionHandler,说回来了CKAccountStatus.Available

4

2 回答 2

1

您无法使用 CloudKit 检测互联网连接。它只会在没有连接时给你一个错误。如果您确实想测试 Internet 连接,那么您可以使用著名的 Reachability 类,如下所示:如何在 iOS 或 OSX 上检查活动的 Internet 连接?

如果您想检测 iCloud 帐户的更改,则可以将以下代码添加到您的 AppDelegate 应用程序 didFinishLaunchingWithOptions:

var localeChangeObserver = NSNotificationCenter.defaultCenter().addObserverForName(NSUbiquityIdentityDidChangeNotification, object: nil, queue: NSOperationQueue.mainQueue()) { _ in
    println("The user’s iCloud login changed: should refresh all user data.")
}

如果你想获取用户ID,你必须执行一个container.requestApplicationPermission 来查看是否允许查询一个container.fetchUserRecordIDWithCompletionHandler。位这需要互联网连接。您可以将其与上面的检测代码一起缓存在设备上以获得正确的状态。

于 2014-09-17T08:23:24.140 回答
0

我遇到了这段代码,比较了最近和以前登录的用户的令牌,如果相同,请使用之前下载的 userRecordID。唯一的问题是,在某些情况下,我的 iPadubiquityIdentityToken方法即使在我登录后也返回 nil,这很奇怪。

class func checkUser() {

        let ubiquityIdentityToken = NSFileManager.defaultManager().ubiquityIdentityToken
        let status = Utility.status()
        let prevUbiquityIdentityToken = status.objectForKey("ubiquityIdentityToken")

        if ubiquityIdentityToken != nil && ubiquityIdentityToken!.isEqual(prevUbiquityIdentityToken) {

        } else if ubiquityIdentityToken != nil && !ubiquityIdentityToken!.isEqual(prevUbiquityIdentityToken) {

            status.setObject(ubiquityIdentityToken!, forKey: "ubiquityIdentityToken")
            Utility.saveStatus(status)

            let defaultContainer = CKContainer.defaultContainer()
            let publicDatabase = defaultContainer.publicCloudDatabase

            defaultContainer.fetchUserRecordIDWithCompletionHandler({ userRecordID, error in
                if error == nil {
                    //do some stuff
                    }) 
                } else {
                    println("\(error.localizedDescription)")
                }
            })
        } else {
            //do some stuff
            status.removeObjectForKey("ubiquityIdentityToken")
            Utility.saveStatus(status)
        }
    }
于 2014-09-17T12:18:26.877 回答