2016-06-01 5 views
3

스위프트를 사용하여 개체를 여러 번 저장할 수 있습니까? 나는 CKFetchRecordsOperation이나 심지어는 보통 performQuery과 같은 것을 사용하여 여러 레코드를 한 번에 가져 오는 방법을 안다. 방금 한 번의 작업으로 여러 개의 새 레코드를 저장할 방법이 확실치 않다는 것을 알았습니다. 내가 지금까지 해왔 던 방식은 나에게 비효율적 인 것처럼 보인다. 예를 들어 : 그것은 매우 비효율적 것처럼 CloudKit 및 Swift를 사용하여 한 번에 여러 CKRecords 저장

let recordsToSave:[CKRecord]! 

for newRecord in recordsToSave { 

    if let database = self.publicDatabase { 

     database.saveRecord(newRecord, completionHandler: { (record:CKRecord?, error:NSError?) in 

      // Check if there was an error 
      if error != nil { 

       // There was an error, handle it properly. 

      } 
      else { 

       // There wasn't an error 
       if let savedRecord = record { 

        // Handle saved record accordingly. 

       } 

      } 
     }) 
} 

그리고 그 모든 벌금과 멋쟁이 작동 않지만

, 그것은 나에게 보인다. 루프를 통해 매번 데이터베이스 호출을 수행하는 대신 CKRecords의 전체 배열을 저장하기 위해 호출 할 특정 함수를 갖는 것이 더 합리적이라고 생각합니다. 기본적으로 여기에 내가 이 내가 할 수있는를 바라고 있어요 무엇 :

let recordsToSave:[CKRecord]! 

if let database = self.publicDatabase { 

    // SOMETHING HERE LIKE database.saveRECORDS (plural) ???? 
    database.saveRecords(recordsToSave, completionHandler: { (records:[CKRecord]?, error:NSError?) in 

     // Check if there was an error 
     if error != nil { 

      // There was an error, handle it properly. 

     } 
     else { 

       // There wasn't an error 
       if let savedRecords = records { 


       } 

      } 
     }) 
} 

가장 잘 내가 획득 한 정보를 기반으로 말해, 할 수있다. database.saveRecords (복수형)과 같은 실제 기능은 없습니다. 내가 놓친 게 아니라면? 나는 그렇게 잘랐다가 말라 지는 것이 아니라 이름이 다르다고 생각하고 있습니다. 그러나 나는 비슷한 것이 있어야한다고 생각합니다.

루프를 돌 때마다 데이터베이스 호출을해야하므로 너무 비효율적 인 것처럼 보입니다.

CloudKit을 사용하여 한 번에 복수 CKRecords에 대한 저장을 수행하는 방법을 아는 사람이 있습니까? 어떤 도움이라도 대단히 감사하겠습니다. 미리 감사드립니다.

답변

7

루프에서 saveRecord을 사용하는 것은 대단히 비효율적입니다. 실제로는 CKDatabase의 모든 편리한 방법을 피하고 적절한 작업을 사용하는 것이 가장 좋습니다.

하나 이상의 레코드를 추가/수정/삭제하려면 CKModifyRecordsOperation을 사용하십시오. 단일 작업으로 모든 레코드를 추가/수정하고 삭제할 수 있습니다. 이것은 saveRecord을 사용하는 것보다 훨씬 더 효율적입니다.

사용 가능한 전체 작업 목록을 보려면 CloudKit Framework Reference을 검색하는 것이 좋습니다.

+1

바로 그게 내가 찾고있는 것입니다! 나는 여러 레코드를 저장하기 위해'CKModifyRecordsOperation'을 사용할 수 있다는 사실을 잊어 버렸습니다. 감사! – Pierce