更新 CloudKit 记录并获取 "UITextField.text must be used from main thread only"
Updating CloudKit record and get "UITextField.text must be used from main thread only"
所以当我 select 我在 tableview 中的记录进行编辑和保存时,如果我选择不给 "UITextField.text must be used from main thread only" 的记录,它只会保存
这显示了错误,并且所有 3 个文本字段都使用了相同的所有 true。
有人知道吗?
@IBAction func saveButton(_ sender: Any) {
let predi = NSPredicate(format: "Feil = %@", self.txtFeilF.text!)
Animation.isHidden = false
Animation.startAnimating()
let query2 = CKQuery(recordType: "Feilrapporter", predicate: predi)
publicDataBase2.perform(query2, inZoneWith: nil) { (results, error) in
if error != nil {
print("Error--->" + error.debugDescription)
}else {
if (results?.count)! > 0 {
let records = (results?[0])! as CKRecord
records.setObject(self.txtNameF.text as CKRecordValue?, forKey: "RaportertAv")
records.setObject(self.txtFeilF.text as CKRecordValue?, forKey: "Feil")
records.setObject(self.txtFeilMsgF.text as CKRecordValue?, forKey: "Melding")
self.publicDataBase2.save(records, completionHandler: { (result, error) in
if error != nil {
print("error--->" + error.debugDescription)
}else {
print("Endring Gjort")
}
})
}
DispatchQueue.main.async(execute: {() -> Void in
self.Animation.stopAnimating()
self.Animation.isHidden = true
self.save.isEnabled = false
self.present(self.alertSaveEditData, animated: true, completion: nil)
self.txtNameF.isHidden = true
self.txtFeilF.isHidden = true
self.txtFeilMsgF.isHidden = true
self.txtFeilF.text = ""
self.txtNameF.text = ""
self.txtFeilMsgF.text = ""
self.recFeil = ""
self.recName = ""
self.recMSG = ""
})
}
}
}
发生的情况是,您正在另一个无法工作的线程上访问 UITextField。所以在开始 perform 方法之前,您在变量中声明所有内容并在需要时使用它。
改为:
@IBAction func saveButton(_ sender: Any) {
let predi = NSPredicate(format: "Feil = %@", self.txtFeilF.text!)
Animation.isHidden = false
Animation.startAnimating()
let query2 = CKQuery(recordType: "Feilrapporter", predicate: predi)
let nameF = self.txtNameF.text as CKRecordValue?
let feilF = self.txtFeilF.text as CKRecordValue?
let feilMsgF = self.txtFeilMsgF.text as CKRecordValue?
publicDataBase2.perform(query2, inZoneWith: nil) { (results, error) in
if error != nil {
print("Error--->" + error.debugDescription)
}else {
if (results?.count)! > 0 {
let records = (results?[0])! as CKRecord
records.setObject(nameF, forKey: "RaportertAv")
records.setObject(feilF, forKey: "Feil")
records.setObject(feilMsgF, forKey: "Melding")
self.publicDataBase2.save(records, completionHandler: { (result, error) in
if error != nil {
print("error--->" + error.debugDescription)
}else {
print("Endring Gjort")
}
})
}
DispatchQueue.main.async(execute: {() -> Void in
self.Animation.stopAnimating()
self.Animation.isHidden = true
self.save.isEnabled = false
self.present(self.alertSaveEditData, animated: true, completion: nil)
self.txtNameF.isHidden = true
self.txtFeilF.isHidden = true
self.txtFeilMsgF.isHidden = true
self.txtFeilF.text = ""
self.txtNameF.text = ""
self.txtFeilMsgF.text = ""
self.recFeil = ""
self.recName = ""
self.recMSG = ""
})
}
}
}
所以当我 select 我在 tableview 中的记录进行编辑和保存时,如果我选择不给 "UITextField.text must be used from main thread only" 的记录,它只会保存
这显示了错误,并且所有 3 个文本字段都使用了相同的所有 true。
有人知道吗?
@IBAction func saveButton(_ sender: Any) {
let predi = NSPredicate(format: "Feil = %@", self.txtFeilF.text!)
Animation.isHidden = false
Animation.startAnimating()
let query2 = CKQuery(recordType: "Feilrapporter", predicate: predi)
publicDataBase2.perform(query2, inZoneWith: nil) { (results, error) in
if error != nil {
print("Error--->" + error.debugDescription)
}else {
if (results?.count)! > 0 {
let records = (results?[0])! as CKRecord
records.setObject(self.txtNameF.text as CKRecordValue?, forKey: "RaportertAv")
records.setObject(self.txtFeilF.text as CKRecordValue?, forKey: "Feil")
records.setObject(self.txtFeilMsgF.text as CKRecordValue?, forKey: "Melding")
self.publicDataBase2.save(records, completionHandler: { (result, error) in
if error != nil {
print("error--->" + error.debugDescription)
}else {
print("Endring Gjort")
}
})
}
DispatchQueue.main.async(execute: {() -> Void in
self.Animation.stopAnimating()
self.Animation.isHidden = true
self.save.isEnabled = false
self.present(self.alertSaveEditData, animated: true, completion: nil)
self.txtNameF.isHidden = true
self.txtFeilF.isHidden = true
self.txtFeilMsgF.isHidden = true
self.txtFeilF.text = ""
self.txtNameF.text = ""
self.txtFeilMsgF.text = ""
self.recFeil = ""
self.recName = ""
self.recMSG = ""
})
}
}
}
发生的情况是,您正在另一个无法工作的线程上访问 UITextField。所以在开始 perform 方法之前,您在变量中声明所有内容并在需要时使用它。
改为:
@IBAction func saveButton(_ sender: Any) {
let predi = NSPredicate(format: "Feil = %@", self.txtFeilF.text!)
Animation.isHidden = false
Animation.startAnimating()
let query2 = CKQuery(recordType: "Feilrapporter", predicate: predi)
let nameF = self.txtNameF.text as CKRecordValue?
let feilF = self.txtFeilF.text as CKRecordValue?
let feilMsgF = self.txtFeilMsgF.text as CKRecordValue?
publicDataBase2.perform(query2, inZoneWith: nil) { (results, error) in
if error != nil {
print("Error--->" + error.debugDescription)
}else {
if (results?.count)! > 0 {
let records = (results?[0])! as CKRecord
records.setObject(nameF, forKey: "RaportertAv")
records.setObject(feilF, forKey: "Feil")
records.setObject(feilMsgF, forKey: "Melding")
self.publicDataBase2.save(records, completionHandler: { (result, error) in
if error != nil {
print("error--->" + error.debugDescription)
}else {
print("Endring Gjort")
}
})
}
DispatchQueue.main.async(execute: {() -> Void in
self.Animation.stopAnimating()
self.Animation.isHidden = true
self.save.isEnabled = false
self.present(self.alertSaveEditData, animated: true, completion: nil)
self.txtNameF.isHidden = true
self.txtFeilF.isHidden = true
self.txtFeilMsgF.isHidden = true
self.txtFeilF.text = ""
self.txtNameF.text = ""
self.txtFeilMsgF.text = ""
self.recFeil = ""
self.recName = ""
self.recMSG = ""
})
}
}
}