Поэтому я хочу стирать каждую запись для определенного типа записи каждый день. В общем, я хочу, чтобы данные были стерты в 00:00, чтобы они были свежими на следующий день. Как мне это сделать? Это то, что я могу настроить на панели управления CloudKit, или мне придется настраивать это программно?
Удаление всех записей CloudKit каждый день из записи определенного типа
Ответы (4)
Удаление записей с панели управления — это большая работа, если вам нужно удалить несколько записей.
Лучший обходной путь — создать отдельный тип записи, который будет содержать одну запись для каждого дня. Затем в записях, которые вы хотите удалить за этот день, установите CKReference для этой конкретной записи дня и установите для ее действия значение CKReferenceAction.DeleteSelf.
После этого вам нужно только удалить запись дня, и все связанные записи будут удалены. Удаление этой записи можно легко выполнить с панели инструментов, или вы можете создать функциональность в своем приложении, или вы можете создать второе приложение для административных действий.
Попробуйте что-то вроде этого:
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" должен быть вашим типом записи. Надеюсь это поможет.
этот код может удалить любое количество записей
import CloudKit
class iCloudDelete {
private let cloudDB: CKDatabase
private var recordIDsToDelete = [CKRecordID]()
private var onAllQueriesCompleted : (()->())?
public var resultsLimit = 10 // default is 100
init(cloudDB: CKDatabase){
self.cloudDB = cloudDB
}
func delete(query: CKQuery, onComplete: @escaping ()->Void) {
onAllQueriesCompleted = onComplete
add(queryOperation: CKQueryOperation(query: query))
}
private func add(queryOperation: CKQueryOperation) {
queryOperation.resultsLimit = resultsLimit
queryOperation.queryCompletionBlock = queryDeleteCompletionBlock
queryOperation.recordFetchedBlock = recordFetched
cloudDB.add(queryOperation)
}
private func queryDeleteCompletionBlock(cursor: CKQueryCursor?, error: Error?) {
print("-----------------------")
delete(ids: recordIDsToDelete) {
self.recordIDsToDelete.removeAll()
if let cursor = cursor {
self.add(queryOperation: CKQueryOperation(cursor: cursor))
} else {
self.onAllQueriesCompleted?()
}
}
}
private func recordFetched(record: CKRecord) {
print("RECORD fetched: \(record.recordID.recordName)")
recordIDsToDelete.append(record.recordID)
}
private func delete(ids: [CKRecordID], onComplete: @escaping ()->Void) {
let delete = CKModifyRecordsOperation(recordsToSave: nil, recordIDsToDelete: ids)
delete.completionBlock = {
onComplete()
}
cloudDB.add(delete)
}
}