【问题标题】:How to define a CKRecord class如何定义 CKRecord 类
【发布时间】:2015-01-25 23:17:18
【问题描述】:

我认为将包含信息的基本数据对象定义为 CKRecord 可能是个好主意,因为我显然将使用 CloudKit。但是,我不知道如何制作一个 CKRecord 类。特别是,我不知道如何定义它的“recordType”。

我的具体问题:为什么“self.recordType =”myRecordType”行会产生错误“无法分配给self中的recordType”?这个CKRecord类中的每一个都是相同的类型,那么我该如何分配它是一个记录类型?

如果您有观察,我的第二个问题是:您是否发现直接在查询等中使用 CloudKit 中的此类对象(读取和写入)有任何其他问题?如果您在某处看到过类似的示例代码,请告诉我。谢谢

class testCKRecordClass: CKRecord {

    override init!(recordType: String!) {
        self.recordType = "myRecordType"
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    var title: NSString {
        get {
            return self.objectForKey("title") as NSString
        }
        set {
            self.setObject(newValue, forKey: "title")
        }
    }

    var location: CLLocation? {
        get {
            return self.objectForKey("location") as? CLLocation
        }
        set {
            self.setObject(newValue, forKey: "location")
        }
}

【问题讨论】:

    标签: ios swift initialization cloudkit ckrecord


    【解决方案1】:

    CKRecord 是由 CloudKit 方法返回的内容。这无法解析为您的 testCKRecordClass(很容易)。因此,您只能使用它来创建 CKRecord 以将其写入 CloudKit。

    一个recordType只能由CKRecord的构造函数发起。如果你调用 super.init(recordType) 可能会起作用

    看起来您只想要一种尽可能简单地使用 CloudKit 的方法。如果是这样,那么我可以建议您也看看https://github.com/evermeer/EVCloudKitDao 这是一个 CloudKit 便利库,它将使用反射来解析和解析 CKRecord。

    【讨论】:

    • 谢谢。您确实在将 CKRecord 保存到 CloudKit 之前创建了它们,所以我只想使用 CKRecord 类作为我的数据块的对象模型。也许 github 项目链接做了类似的事情。我已经使用 CloudKit 完成了其他工作,如果可能的话,我很乐意在本地进行。
    • github 项目使用一个基类,其中包含 CloudKit 可以返回的元数据属性的字段。在将对象保存到 CloudKit 之前,它将创建一个 CKRecord 并在该对象上使用反射来添加所有字段。从 CloudKit 读取时,它会做同样的事情,但反过来。这样,您只需添加对该棒球的引用,无需额外编码。
    • 我一定会玩弄它的。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多