【问题标题】:How to use "fetchWithRecordID" for automatically generated ID in CloudKit Dashboard?如何在 CloudKit Dashboard 中使用“fetchWithRecordID”自动生成 ID?
【发布时间】:2014-12-03 16:42:21
【问题描述】:

我是 CloudKit 和 iOS 开发的新手。我已经手动向 CloudKit 仪表板添加了一些记录,现在我想通过它们的 ID 检索它们,这些 ID 是自动创建的。然后我想在静态表格视图单元格的 UILabel 中显示记录的值。有两个问题:1)。使用仪表板中的 ID 时,我在 xCode 中遇到错误(错误显示为“预期的”、“分隔符”);和 2)。我找不到任何将记录值放入静态表格视图单元格中的 UILabel 的示例。 (尤其是快速)。任何帮助是极大的赞赏!

这是我的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    publicDB.fetchRecordWithID (f7080e7a-f8c3-4db6-b8ee-642a011a6762) { record, error in


        if error != nil {

            println("there was an error \(error)")

        } else {

            // this is my UILabel in a static tableview. The record's only attribute is //called "subCategory"

            plasticOneValue.text = record["subCategory"]
        }   
    }
}

更新:交替 - 我尝试了这段代码并且构建成功,但控制台说它有一个内部错误并且 UILabel 仍然是空白......关于我在上面的代码中做错了什么的任何建议或这段代码?

override func viewDidLoad() {
    super.viewDidLoad()

    // I created a new CKRecord ID Object and provided the existing ID in dashboard and //it fixed the error about requiring a "," separator

   var plasticOneID = CKRecordID(recordName: "f7080e7a-f8c3-4db6-b8ee-642a011a6762")

    publicDB.fetchRecordWithID (plasticOneID) { record, error in

        if error != nil {

            println("there was an error \(error)")

        } else {

            self.plasticOne.text = (record.objectForKey("subCategory") as String)

        }
    }
}

【问题讨论】:

    标签: ios swift cloudkit


    【解决方案1】:

    这是两个不同的问题

    1. 查询 ID 时,您必须像在第二个示例中那样查询 CKRecordID
    2. 访问 UI 时,您必须在主队列中执行此操作。

    那么代码会是这样的:

    publicDB.fetchRecordWithID(CKRecordID(recordName: "f7080e7a-f8c3-4db6-b8ee-642a011a6762"), completionHandler: {record, error in
        if error != nil {
            println("there was an error \(error)")
        } else {
            NSOperationQueue.mainQueue().addOperationWithBlock {
                self.plasticOne.text = (record.objectForKey("subCategory") as String)
            }
       }
    })
    

    【讨论】:

    • 当我尝试你的代码时,我仍然得到这个错误,所以我一定做错了 - “有一个错误 ” 我也有这个代码 - import UIKit import CloudKit let myContainer:CKContainer = CKContainer.defaultContainer() let publicDB: CKDatabase = myContainer.publicCloudDatabase let privateDB: CKDatabase = myContainer.privateCloudDatabase class TableViewController: UITableViewController { @IBOutlet weak var plasticOne: UILabel! @IBOutlet weak var plasticTwo: UILabel! @IBOutlet weak var plasticThree: UILabel! @EdwinVermeer
    • 感谢您提供有关队列的额外信息。我还在学习。每次在 UI 中获取、保存或更新数据时,是否需要调用该 NSOperationQueue.mainQueue?我会在什么情况下使用后台队列?提前感谢您的帮助!
    • 所有回调块总是在单独的队列中调用。如果您操作用户界面,那么您需要在主队列上执行此操作。您确定具有该 ID 的记录在您的公共数据库中吗?错误代码 2005 很奇怪。您是否在设备上使用与开发者帐户相同的 iCloud 帐户?也许 RecordID 在私有数据库中,而您正在查询公共数据库?
    • 记录在 publicDB 默认区域中。我正在使用模拟器。仍然收到该错误。还有其他想法吗?新手问题在这里,但什么是回调块,什么时候使用?再次感谢! @EdwinVermeer
    • 您的代码工作...有点尴尬,但我没有意识到我有几天未检查 iCloud 设置。再次感谢!
    猜你喜欢
    • 2014-04-25
    • 2016-02-06
    • 2016-03-17
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多