swift - Why is CloudKit not allowing me to save any records to my default container's public database? -
i have array of ckrecords i'm trying save default container's public database first time. created ckmodifyrecordsoperation , attempted add operation public database. unsuccessful i'm not getting error messages. tried adding each method individually database, sans ckoperation... unsuccessful, devoid of error messages. sure, checked cloudkit dashboard; there's nothing there.
below method in question. it's hooked simple ibaction button in nswindow. can ignore nested loops i'm creating ckrecords model data. seem working expected. error checking code inside of completion blocks ckmodifyrecordsoperation. specifically, modifyrecordscompletionblock printing: "saved 0 records cloudkit."
@ibaction func uploaddatatocloudkit(_ sender: nsbutton) { // cloudkit container , public database let mycontainer = ckcontainer.default() let publicdb = mycontainer.publicclouddatabase // create array of cloudkit records can save batch var cloudrecords = [ckrecord]() let groups = paycodes().groups // each paycode group... paycodegroup in groups { // create ckrecord , give type let paycodegrouprecord = ckrecord(recordtype: "paycodedata") // each paycode in group... paycode in paycodegroup.paycodes { // fill new ckrecord key/value pairs paycodegrouprecord.setobject(paycodegroup.title nsstring, forkey: "group") if let commercialid = paycode.id.commercial nsstring?, let residentialid = paycode.id.residential nsstring? { paycodegrouprecord.setobject(commercialid, forkey: "commercialid") paycodegrouprecord.setobject(residentialid, forkey: "residentialid") } paycodegrouprecord.setobject(paycode.title nsstring, forkey: "title") if let description = paycode.description nsstring? { paycodegrouprecord.setobject(description, forkey: "description") } paycodegrouprecord.setobject((paycode.includestripcharge ? 1 : 0) nsnumber, forkey: "includestripcharge") paycodegrouprecord.setobject((paycode.needsresolutioncode ? 1 : 0) nsnumber, forkey: "needsresolutioncode") paycodegrouprecord.setobject(paycode.pay.commercial nsnumber, forkey: "commercialpay") paycodegrouprecord.setobject(paycode.pay.residential nsnumber, forkey: "residentialpay") // save new ckrecord array cloudrecords.append(paycodegrouprecord) } } print("there \(cloudrecords.count) records saved...") // print(cloudrecords) // create operation save records let operation = ckmodifyrecordsoperation(recordstosave: cloudrecords, recordidstodelete: nil) operation.perrecordcompletionblock = { savedrecord, error in guard error != nil else { print("there error: \(error!.localizeddescription)") return } print("saved record cloudkit") } operation.modifyrecordscompletionblock = { savedrecords, deletedrecordids, error in guard error != nil else { print("there error: \(error!.localizeddescription)") return } guard let savedrecords = savedrecords else { return } print("saved \(savedrecords.count) records cloudkit") } // run operation publicdb.add(operation) // cloudrecords.foreach { record in // publicdb.save(record) { savedrecord, error in // guard error != nil else { // print("there error: \(error!.localizeddescription)") // return // } // // guard let savedrecord = savedrecord else { return } // print("saved record: \(savedrecord.allkeys())") // } // } }
your problem duplicate records reuse of ckrecord instance.
change:
for paycodegroup in groups { // create ckrecord , give type let paycodegrouprecord = ckrecord(recordtype: "paycodedata") // each paycode in group... paycode in paycodegroup.paycodes { // fill new ckrecord key/value pairs paycodegrouprecord.setobject(paycodegroup.title nsstring, forkey: "group") to:
for paycodegroup in groups { // each paycode in group... paycode in paycodegroup.paycodes { // create ckrecord , give type let paycodegrouprecord = ckrecord(recordtype: "paycodedata") // fill new ckrecord key/value pairs paycodegrouprecord.setobject(paycodegroup.title nsstring, forkey: "group")
Comments
Post a Comment