未登录 iCloud 时的 Swift CloudKit 读取
Posted
技术标签:
【中文标题】未登录 iCloud 时的 Swift CloudKit 读取【英文标题】:Swift CloudKit reading when not logged in to iCloud 【发布时间】:2015-02-01 22:28:56 【问题描述】:所以当我(在模拟器中)我登录到我的 iCloud 时,我可以从我的数据库中读取信息,但是,拥有我的应用程序的每个人(显然)都不会。当我在未登录的情况下尝试访问数据库时,出现此错误消息:
<CKError 0x7fc1e3416510: "Request Rate Limited" (7/2008); "This operation has been rate limited"; Retry after 3.0 seconds>
后跟:
Error Domain=NSCocoaErrorDomain Code=4097 "The operation couldn’t be completed. (Cocoa error 4097.)" (connection to service named com.apple.cloudd) UserInfo=0x7fc1e352f800 NSDebugDescription=connection to service named com.apple.cloudd
代码:
//VARIABLES********************************************************
@IBOutlet var questions: UILabel!
var resultsOfDB : String = ""
var indexes : [Int] = []
var counter : Int = 0
var newStr : String = ""
//*****************************************************************
@IBAction func getNewQbutton(sender: AnyObject)
let container = CKContainer.defaultContainer()
var publicDB = container.publicCloudDatabase
let myQuery = CKQuery(recordType: "QuestionsTable", predicate: NSPredicate(value: true))
publicDB.performQuery(myQuery, inZoneWithID: nil)
results, error in
if error != nil
println(error)
else
dispatch_async(dispatch_get_main_queue(), () -> Void in
self.resultsOfDB = results.description
//for each character in resultsOfDB
for character in self.resultsOfDB
if(character == "\"")
self.indexes.append(self.counter)
self.counter++
self.newStr = self.resultsOfDB.substringWithRange(Range<String.Index>(start: advance(self.resultsOfDB.startIndex, self.indexes[0] + 1), end: advance(self.resultsOfDB.endIndex, -(self.counter - self.indexes[1]))))
self.questions.text = self.newStr
)
有谁知道当他们没有登录到我的 iCloud 帐户时如何读取我的数据库?谢谢!
【问题讨论】:
请向我们展示您的代码。 好吧,我做到了!我认为/认为这可能是设置问题,这意味着我错误地设置了数据库错误或类似的东西,所以我不确定是否需要代码! 默认情况下,为公共数据库中记录类型上的每个人设置读取权限。用户不必登录即可查询这些记录。如果他们想写入数据,他们必须登录自己的 iCloud 帐户。 【参考方案1】:公共数据库只能在生产环境不登录才能读取,在开发环境不可以。
Apple 的文档说:
在开发中,当您通过 Xcode 在模拟器或设备上运行应用程序时,您需要输入 iCloud 凭据才能读取公共数据库中的记录。在生产环境中,默认权限允许未经身份验证的用户读取公共数据库中的记录,但不允许他们写入记录。
见CloudKit Quick Start。
【讨论】:
【参考方案2】:这是一个模拟器错误(Apple 团队可能会在接下来的更新中修复此问题)。 如果你的模拟器没有登录 iCloud,就会出现这个错误。 但是,即使该设备没有登录 iCloud,虚拟设备也不会出现此错误
【讨论】:
以上是关于未登录 iCloud 时的 Swift CloudKit 读取的主要内容,如果未能解决你的问题,请参考以下文章
如果用户未登录 iCloud,为啥 UbiquityContainer 为零?