2015-02-05 24 views
7

Vì vậy, tôi muốn xóa mọi bản ghi cho một loại bản ghi cụ thể mỗi ngày. Vì vậy, về cơ bản, tôi muốn dữ liệu được xóa lúc 12:00 sáng để nó sẽ được làm mới cho ngày hôm sau. Tôi sẽ đi đâu để tới đó? Đây có phải là thứ mà tôi có thể thiết lập trong bảng điều khiển CloudKit hay tôi sẽ phải thiết lập lập trình này?Xóa tất cả bản ghi CloudKit mỗi ngày từ một loại bản ghi cụ thể

Trả lời

9

Xóa bản ghi khỏi trang tổng quan là rất nhiều công việc nếu bạn cần xóa nhiều bản ghi.

Cách giải quyết tốt nhất là tạo một loại bản ghi riêng biệt sẽ chứa một bản ghi cho mỗi ngày. Sau đó, trong các bản ghi mà bạn muốn xóa cho ngày đó thiết lập một CKReference cho bản ghi ngày cụ thể đó và đặt hành động của nó thành CKReferenceAction.DeleteSelf

Sau đó bạn chỉ phải xóa bản ghi ngày và tất cả các bản ghi liên quan sẽ bị xóa. Xóa một bản ghi đó có thể dễ dàng được thực hiện từ trang tổng quan hoặc bạn có thể tạo chức năng trong ứng dụng của mình hoặc bạn có thể tạo ứng dụng thứ 2 cho các tác vụ quản trị.

4
func deleteAllRecords() 
{ 
    let publicDatabase: CKDatabase = CKContainer.defaultContainer().publicCloudDatabase 

    // fetch records from iCloud, get their recordID and then delete them 
    var recordIDsArray: [CKRecordID] = [] 

    let operation = CKModifyRecordsOperation(recordsToSave: nil, recordIDsToDelete: recordIDsArray) 
    operation.modifyRecordsCompletionBlock = { 
     (savedRecords: [CKRecord]?, deletedRecordIDs: [CKRecordID]?, error: NSError?) in 
     print("deleted all records") 
    } 

    publicDatabase.addOperation(operation) 
} 
5

Hãy thử một cái gì đó như thế này:

let publicDb = CKContainer.defaultContainer().publicCloudDatabase 

let query = CKQuery(recordType: "RECORD TYPE", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)) 
publicDb.performQuery(query, inZoneWithID: nil) { (records, error) in 

    if error == nil { 

     for record in records! { 

      publicDb.deleteRecordWithID(record.recordID, completionHandler: { (recordId, error) in 

       if error == nil { 

        //Record deleted 

       } 

      }) 

     } 

    } 

} 

"RECORD TYPE" nên được loại hồ sơ của bạn. Hi vọng điêu nay co ich.

+2

đây là cách chậm hơn do vòng lặp for, nếu bạn có nhiều hơn thì 3-5 mục này sẽ mất nhiều thời gian hơn sau đó một phút !! bạn nên sử dụng một đợt xóa như thế này: http://stackoverflow.com/a/36414506/530884 – Shaybc

+0

Vòng lặp đó đang bắt đầu một số hoạt động không đồng bộ một cái khác! Bạn sẵn sàng có bao nhiêu kết nối đồng thời? Tôi sẽ tuần tự hóa nó bằng cách nào đó. –

Các vấn đề liên quan