2016-11-01 5 views
0

CKRecordID를 NSUserDefaults에 저장하려고합니다. 그것을 원래의 타입으로 되돌릴 수 있나요? NSData가 아닌 그것을 검색 할 때 CKRecordID로 되돌릴 수 있습니까? 이런 식으로 NSKeyArchiver를 사용할 수 있습니까? 아니면 다른 방법이 있습니까? 당신이 recordID 처음 저장 한 후문제 Swift 3에서 원래 유형의 NSData 보관 해제

func getRecordToUpdate(_ locations:CLLocation) 
    { 
     if defaults1.object(forKey: "locationData") == nil{ 
      locationRecord.setObject(locations, forKey: "location") 
      let id = locationRecord.recordID 
      let dataId = NSKeyedArchiver.archivedData(withRootObject: id) 
      defaults1.set(dataId, forKey: "locationData") 
      self.updateLocationRecord(locations: locations) 
     }else{ 
      if let loadedData = defaults1.object(forKey: "locationData") { 
       if (NSKeyedUnarchiver.unarchiveObject(with: loadedData as! Data)) != nil 
       { 
        let publicDB = CKContainer.default().publicCloudDatabase 
        let lit = NSKeyedUnarchiver.unarchiveObjectWithData(loadedData as! CKRecordID) 
        publicDB.fetch(withRecordID: lit ,completionHandler: { 
         (record, error) in 
         if error == nil 
         { 
          publicDB.delete(withRecordID: (record?.recordID)!, completionHandler: { 
           (record, error) in 
           if(error == nil){ 
            print("old record delete") 
            let id = self.locationRecord.recordID.recordName 
            self.locationRecord.setObject(locations, forKey: "location") 
            self.defaults1.set(id, forKey: "locationData") 
            self.updateLocationRecord(locations: locations) 
           } 
           else{ 
           } 
          }) 
         }else{ 
          print("Error fetching previous record") 
          } 
        }) 
       } 
      } 
     } 
    } 

답변

1

은, CKRecordID 개체를 나타내는 Data 보장합니다.

사용자 기본값에서 원시 데이터를 읽고 데이터를 레코드 ID로 보관 취소하십시오.

if let loadedData = defaults1.object(forKey: "locationData") as? Data { 
    let lit = NSKeyedUnarchiver.unarchiveObjectWithData(loadedData) as! CKRecordID 
    let publicDB = CKContainer.default().publicCloudDatabase 
    publicDB.fetch ...