1
我將讓用戶通過點擊表格單元格來編輯數據。用戶將選擇表格單元格,無論他們想要修改哪個數據,一個新的VC「UpdateDataViewController」將出現以前選擇的數據。用戶可以修改數據並點擊保存按鈕將編輯後的數據保存到數據庫表中。使用Swift更新從核心數據中的UITableViewCell中選擇的數據3
這裏是我的代碼:
//Code to pass the data in selected row
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "update" {
var path = self.tableView.indexPathForSelectedRow
let nav = segue.destination as! UINavigationController
let updateViewController = nav.topViewController as! UpdateDataViewController
updateViewController.index = path?.row
updateViewController.editPeopleList = peopleList[(path?.row)!].name
// let updatePersonModel = PersonModel()
// updateViewController.editPeopleList = [updatePersonModel.name!]
}
}
UpdateDataViewController.swift
// code to select the row and enable to edit touching any place of text field
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.section == 0 && indexPath.row == 0 {
updateDataTextField.becomeFirstResponder()
}
tableView.deselectRow(at: indexPath, animated: true)
}
變量需要:
var index:Int?
var editPeopleList:String!
var updatePeopleList: String?
override func viewDidLoad() {
super.viewDidLoad()
updateDataTextField.text = editPeopleList
}
// after editing data is replaced here:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
if segue.identifier == "updateData" {
updatePeopleList = updateDataTextField.text
}
}
使用開卷SEGUE核心數據更新代碼:
//code for unwind segue
@IBAction func updateDataToViewController(segue: UIStoryboardSegue) {
let updatePeopleData = segue.source as! UpdateDataViewController
let index = updatePeopleData.index
// let dataToUpdate = peopleList[index!].name
let personData = updatePeopleData.updatePeopleList
let updatePersonName = PersonModel()
updatePersonName.name = personData
let path = self.tableView.indexPathForSelectedRow
let selectedPersonData = peopleList[(path?.row)!]
PersonServices.sharedInstance.updatePerson(updatePersonName: updatePersonName, selectedPersonData: selectedPersonData )
// updatePersonModel.name = name
//peopleList[index!] = updatePeopleData.
tableView.reloadData()
}
這裏是核心數據更新數據更新我的功能:
func updatePerson(updatePersonName: PersonModel , selectedPersonData: PersonModel) {
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: PersonEntity)
let updatepredicates = NSPredicate(format: "name == %@" , selectedPersonData.name! )
print("data to update: \(updatepredicates)")
print("updated data: \(String(describing: updatePersonName.name))")
fetchRequest.predicate = updatepredicates
print("after edit: \(fetchRequest)")
var updatePersonModels = [PersonModel]();
do {
if let person = try
self.managedObjectContext.fetch(fetchRequest).first as? Person {
let newPersondata = NSEntityDescription.insertNewObject(forEntityName: PersonEntity, into: managedObjectContext)
newPersondata.setValue("updatePersonName.name", forKey: person.name!)
do {
try self.managedObjectContext.save()
updatePersonModels.append(PersonModel(person: person))
} catch let error as NSError {
print("could not save. \(error), \(error.userInfo)")
}
}
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
,但我的應用程序在
newPersondata.setValue("updatePersonName.name", forKey: person.name!)
中的updatePerson功能崩潰。
錯誤是:
終止應用程序由於未捕獲的異常「NSUnknownKeyException」, 原因:「[setValue方法:forUndefinedKey:]:將 實體的人不是關鍵值編碼兼容的鍵「歐麥爾」。」