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

我的具体问题:为什么“self.recordType =“myRecordType”行会引起错误“无法在self中分配给recordType”?每个CKRecord类的类型都相同,因此如何为它分配recordType ?

我的第二个问题是,如果您有观察结果:在查询中直接使用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")
        }
}

最佳答案

CKRecord是CloudKit方法将返回的东西。不能解析为您的testCKRecordClass(容易)。因此,您只能将其用于创建CKRecord并将其写入CloudKit。

recordType只能由CKRecord的构造函数启动。如果调用super.init(recordType),也许可以正常工作

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

08-18 15:44