Quindi, desidero cancellare ogni record per un tipo di record particolare ogni giorno. Quindi, in pratica, voglio che i dati vengano cancellati alle 12:00 in modo che siano freschi per il giorno successivo. Come potrei fare questo? È qualcosa che potrei installare nella dashboard di CloudKit o dovrò impostarlo a livello di programmazione?Eliminazione di tutti i record CloudKit ogni giorno da un particolare tipo di record
risposta
L'eliminazione di record dalla dashboard è molto lavoro se è necessario eliminare più record.
La soluzione migliore consiste nel creare un recordType separato che conterrà un record per ogni giorno. Quindi, nei record che desideri eliminare per quel giorno, imposta un CKReference su quel particolare giorno record e imposta la sua azione su CKReferenceAction.DeleteSelf
Dopodiché devi solo rimuovere il record del giorno e tutti i record correlati verranno rimossi. La rimozione di quel record potrebbe essere facilmente eseguita dalla dashboard o potresti creare funzionalità nella tua app o potresti creare una seconda app per le azioni amministrative.
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)
}
provare qualcosa di simile:
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
}
})
}
}
}
"TIPO RECORD" dovrebbe essere il vostro tipo di record. Spero che questo ti aiuti.
questo è molto più lento a causa del ciclo for, se avete più di 3-5 voci questo richiederà più tempo di un minuto !! dovresti utilizzare una eliminazione batch come questa: http://stackoverflow.com/a/36414506/530884 – Shaybc
Quel ciclo inizia diverse operazioni asincrone una dopo l'altra! Quante connessioni concorrenti sei disposto ad avere? Lo serializzerei in qualche modo. –