未登录 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 读取的主要内容,如果未能解决你的问题,请参考以下文章

SWIFT - 将文件上传到 icloud 文档未完成

如果用户未登录 iCloud,为啥 UbiquityContainer 为零?

从 icloud 打开文件时,Swift 4 应用程序崩溃

当用户未登录 iCloud 时,我可以使用 CloudKit 在我的应用程序中使用订阅吗?

苹果手机为啥登陆不了icloud?

iCloud 和 CoreData:更改为 iCloud Store 时的通知(使用现有 iCloud 数据首次启动)