2015-05-29 41 views
0

我有兩種記錄類型:Books & Authors。書有兩個屬性BookName(String) & AuthorName(CKReference)Authors有一個屬性AuthorTitle(String)如何從CKReference對象中提取參考字符串

我保存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單元格中顯示它顯示的AuthorName記錄ID。相反,我想看到字符串格式的AuthorName。我如何得到它?

+0

請出示addBookViewController.authorTitle的聲明方式 – harryhorn

+0

其非常複雜和需要長時間的解釋。但我向你保證,addBookViewController.authorTitle是作者的CKRecord。當我在tableview上顯示authorReference.recordID.recordName時,我得到正確的作者記錄ID爲String。但我想用此ID和顯示AuthorsTitle字符串屬性來獲取實際作者記錄。 –

回答

1

Your AuthorName字段是對其他記錄的引用。爲了從該記錄中獲取數據,您需要先獲取數據。

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

我剛剛使用了字符串格式的引用recordID,它工作。謝謝您的幫助。 –

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];