如何使用CloudKit仪表板创建Reference属性

时间:2015-01-23 17:57:09

标签: swift dashboard cloudkit ckreference

我使用CloudKit Dashboard创建了一条记录,因此不会以编程方式创建记录。在“默认区域,模型数据”下(抱歉,我需要至少10个声明来发布图片..:/)所以这是发短信版本。

“EventRef0 975f5715-3ccd-4c5f ... DeleteSelf参考”

所以我在我创建的记录中有3个像这样的参考字段。 现在位于“默认区域,活动”下。其中一条记录有以下标题。

ID:975f5715-3ccd-4c5f ...

创建时间:2015年1月20日19:00创建者:_ac6625 ...修改:修改者:

我的问题如下:

1)我将什么放在EventRef0的“参考”字段中?我目前拥有的事件ID,还是其他什么?

2)这是创建多个引用的正确方法,即通过为我想引用的3个事件创建3个引用吗?

3)当我想获取事件时,是否可以在一次调用数组中获取所有CKReferences,然后获取索引该数组的事件数据,或者我是否必须单独调用以获取每个事件?我希望有一种方法可以通过键入“Reference”属性来获取数组中的所有引用。不确定这是否可行。请最好是斯威夫特。

非常感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

如果你有数据' recordType什么将引用多个'事件'记录类型对象,然后你应该在'事件'中添加一个CKReference。记录类型,其中CKReference指向数据'宾语。因此,数据对象不需要对事件'宾语。您可以通过查询CKReference字段获取所有事件对象,以获取“数据”的ID。对象

只需查询您的活动' recordType,带有这样的谓词:

CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:dataID action:CKReferenceActionNone];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"dataID == %@", recordToMatch];

答案 1 :(得分:0)

充满活力,

-1 /理想情况下,您应该一次只询问一个问题,而不是编译列表,我认为这样可以更容易回答并为其他人找到答案。

0 /你需要先看看这个主题的一些教程,然后才能在这里发帖,你会很容易找到这样一个问题的答案。这个网站发布了很棒的教程。

http://www.appcoda.com/cloudkit-introduction-tutorial/

但是为了让你离开,从我开始;我会完成的。

1 /引用字段需要包含一个记录UUID,所以这是一个长十六进制数,看起来像这样......

[![enter image description here][1]][1]

2 /您希望将相同的引用放入要组合在一起的记录中,因此您需要一个记录ID /引用来搜索您将用于在一次调用中查找所有三条记录的记录。 / p>

3 /我认为我不太了解您的数据库组织,但是您需要使用复合谓词来观察它们。看到这个问题。

CloudKit compound query (query with OR)

此代码创建匹配键的记录,然后执行操作以查找与所述键匹配的所有记录。

func read4Cloud(theLink: String, theCount: Int) {
    var starCount:Int = 0
    let container = CKContainer(identifier: "iCloud.blah")
    let publicDB = container.publicCloudDatabase
    let privateDB = container.privateCloudDatabase
    let records2Match = CKRecordID(recordName: theLink)
    let recordToMatch = CKReference(recordID: records2Match, action: .None)
    let predicate = NSPredicate(format:"theLink == %@", recordToMatch)
    let query = CKQuery(recordType: "Blah", predicate: predicate)


    readerOperation = CKQueryOperation(query: query)
    readerOperation.recordFetchedBlock = { (record) in
        // Save your record into your array
        // blahArray.append(record["blah"])
        starCount += 1
}

    readerOperation.queryCompletionBlock = {(cursor, error) in
        print("query4Cloud \(theLink) \(theCount) \(starCount)" )
        if error != nil {
            print("ting, busted")
        } else {
           print("records found \(starCount)")
        }
    }
    readerOperation.qualityOfService = .Background

    publicDB.addOperation(readerOperation)
}