Запись CloudKit Fetch с CKRecordID
У меня проблема с получением записи из iCloud. Я хочу получить доступ к выбранной записи и назначить одно значение из пары ключ-значение.
Я уже попробовал:
currentRecord.object(forKey:)
currentRecord.value(forKey:)
currentRecord.value(forKeyPath:
Вот мой метод fetchRecord:
public func fetchRecord(_ recordID: CKRecordID) -> Void {
let privateDatabase = CKContainer.default().privateCloudDatabase
var recordIDArray: [CKRecordID] = []
recordIDArray.append(recordID)
let fetchRecordsWithID = CKFetchRecordsOperation(recordIDs: recordIDArray)
fetchRecordsWithID.fetchRecordsCompletionBlock = { (records, error) in
if error != nil {
print("Error")
} else {
DispatchQueue.main.async() {
self.currentRecord = records?[recordID]
print("\(self.currentRecord)")
print("ALL KEYS: \(self.currentRecord.allKeys())")
self.companyNameLabel.text = self.currentRecord.value(forKeyPath: "companyName") as? String// as? String //object(forKey: "companyName") as? String
// self.companyStreetLabel.text = record!.object(forKey: "companyStreet") as? String
// self.companyZipCodeLabel.text = record!.object(forKey: "companyZipCode") as? String
// self.companyCityLabel.text = record!.object(forKey: "companyCity") as? String
// self.companyPhoneLabel.text = record!.object(forKey: "companyPhone") as? String
// self.companyEmailLabel.text = record!.object(forKey: "companyEmail") as? String
}
}
}
Результат:
print("\(self.currentRecord)")
является:
{
creatorUserRecordID -> <CKRecordID: 0x170021800; recordName=__defaultOwner__, zoneID=_defaultZone:__defaultOwner__>
lastModifiedUserRecordID -> <CKRecordID: 0x17002d420; recordName=__defaultOwner__, zoneID=_defaultZone:__defaultOwner__>
creationDate -> 2017-02-24 16:39:21 +0000
modificationDate -> 2017-02-24 17:18:54 +0000
modifiedByDevice -> iCloud
companyStreet -> "Street"
companyCity -> "City"
companyPhone -> "+49 123456136"
companyEmail -> "info@abc.de"
companyName -> "PKP"
companyZipCode -> "12356"
})
С записью все вроде нормально
print("ALL KEYS: \(self.currentRecord.allKeys())")
Результат:
ALL KEYS: ["companyStreet", "companyCity", "companyPhone", "companyEmail", "companyName", "companyZipCode"]
Если я хочу присвоить значение ключа "companyStreet" моей метке, он возвращает nil:
fatal error: unexpectedly found nil while unwrapping an Optional value
2017-02-24 18:19:55.239907 XYZ[4868:976786] fatal error: unexpectedly found nil while unwrapping an Optional value
РЕДАКТИРОВАТЬ -> РЕШЕНО Я наконец решил свою проблему. Проблема была в моем appDelegate, который пытался обработать мою CKNotification. Вместо того чтобы ссылаться на мой существующий TableViewController (встроенный в Navigation Controller - TabBarController), я создал новый экземпляр моего TableViewController.