如何从 CKReference 对象中获取引用字符串

Posted

技术标签:

【中文标题】如何从 CKReference 对象中获取引用字符串【英文标题】:How to fetch reference string from CKReference object 【发布时间】:2015-05-29 21:51:59 【问题描述】:

我有两种记录类型:BooksAuthors。书籍有两个属性BookName(String)AuthorName(CKReference)Authors 有一个属性AuthorTitle(String)

我保存CKReference如下

let authorReference = CKReference(record: addBookViewController.authorTitle!, action: CKReferenceAction.DeleteSelf)

bookRecord.setObject(authorReference, forKey: "AuthorName")

我目前正在获取CKReference 以显示在桌子上

let authorReference = bookRecord.objectForKey("AuthorName") as! CKReference

let authorTitle = authorReference.recordID.recordName

cell.detailTextLabel?.text = authorTitle

在 tableview 单元格上,它显示记录 ID 为 AuthorName。相反,我想以字符串格式查看AuthorName。如何获得?

【问题讨论】:

请说明 addBookViewController.authorTitle 是如何声明的 它非常复杂,需要很长的解释。但我向你保证 addBookViewController.authorTitle 是作者的 CKRecord。当我在 tableview 上显示 authorReference.recordID.recordName 时,我得到了正确的 Authors 记录 ID 作为字符串。但我想用这个 ID 获取实际的作者记录并显示 AuthorsTitle 字符串属性。 【参考方案1】:

你也可以使用CKFetchRecordsOperation

CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:@"firstRecordIDName"];
CKRecordID *recordID2 = [[CKRecordID alloc] initWithRecordName:@"secondRecordIDName"];
NSArray *arrayOfRecordIDs = @[recordID,recordID2];;
CKFetchRecordsOperation *fetchRecordsOperation = [[CKFetchRecordsOperation alloc]initWithRecordIDs:arrayOfRecordIDs];
fetchRecordsOperation.perRecordCompletionBlock = ^(CKRecord *record, CKRecordID *recordID, NSError *error) 
    if (error) 

        // handle error

    else 

        // Successfull fetch, create data model

    

;
fetchRecordsOperation.database = publicDatabase;
[fetchRecordsOperation start];

【讨论】:

【参考方案2】:

您的 AuthorName 字段是对其他记录的引用。为了从该记录中获取数据,您需要先获取它。

database.fetchRecordWithID(CKRecordID(recordName: authorReference.recordID), completionHandler: record, error in
 // now you can use record.objectForKey("AuthorTitle")

【讨论】:

我只是使用了字符串格式的参考记录 ID,它起作用了。感谢您的帮助。

以上是关于如何从 CKReference 对象中获取引用字符串的主要内容,如果未能解决你的问题,请参考以下文章

CKReference .DeleteSelf 属性无效

从 CloudKit 获取包括 CKReference 的数据

无法在 for 循环中从公共数据库中获取多个 CKReference 记录

CloudKit CKReference 列表

CloudKit - NSPredicate 用于在引用列表中查找包含多个 CKReference 的所有记录

如何在 CloudKit 中存储对共享记录的引用