我试图让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
。
答案 0 :(得分:1)
您无法使用CloudKit检测互联网连接。它只会在没有连接时给你一个错误。如果您确实想测试互联网连接,那么您可以使用着名的Reachability类,如下所示:How to check for an active Internet connection on iOS or OSX?
如果要检测对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。这需要互联网连接。您可以将其与上述检测代码一起缓存在设备上,以获得正确的状态。
答案 1 :(得分:0)
我遇到了这段代码,比较了最近和之前登录过的用户令牌,如果相同,请使用之前下载的userRecordID。我的iPad ubiquityIdentityToken
方法在某些情况下返回nil甚至dow的唯一问题是我登录了,很奇怪。
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)
}
}