これは私のシナリオです...ナビゲーションバーの右上にあるプラスボタンをクリックすると、テキストフィールドの警告ビューが表示され、データを追加しますテキストフィールドに「OK」ボタンを押します。これにより、テキストフィールドのデータがテーブルビューに表示され、コアデータにも格納されます。Tableviewのエントリを更新してTableviewに表示する問題
次に、alertviewテキストフィールドのデータを持つ行をクリックすると、編集用の別のビューに移動します。このviewcontroller
には、前の画面の行の値を持つテキストフィールドがあります。今度は、テキストフィールドをクリックして値を編集し、右上の「保存」を押します。ここで、saveを押して前の画面に移動すると、編集した値が古い値の代わりにtableviewに表示されるようになりました。
しかし、私は保存を押して前の画面に戻るときは、更新された値をtableviewcontroller
に表示しています。しかし実際には、その値がコアデータに2回追加され、このtableview
から別のビューに戻って戻ってくると、編集前の値だけでなく新しい編集値も表示されます二度追加!私は、この動作を理解することができないんだけど....
保存]ボタンをクリックすると編集画面では、これは私がやっているものです...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "save" {
editedModel = editTextField.text
}
}
テーブルビューに戻ってくるには画面には、これは私がcellForRowAtIndexPathで
@IBAction func saveToMainEditViewController (segue:UIStoryboardSegue) {
let detailViewController = segue.source as! EditCategoriesTableViewController
let index = detailViewController.index
let modelString = detailViewController.editedModel //Edited model has the edited string
let myCategory1 = Category(context: self.context)
myCategory1.categoryName = modelString
mangObjArr[index!] = myCategory1
//Saving to CoreData
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Category", in: managedContext)
let category = NSManagedObject(entity: entity!, insertInto: managedContext)
category.setValue(myCategory1.categoryName, forKeyPath: "categoryName")
category.setValue(myCategory1.categoryId, forKey: "categoryId")
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
categoryTableView.reloadData()
}
(tableviewcontroller
画面で)...やっている、これは私が...やっているものです
let cell = tableView.dequeueReusableCell(withIdentifier: "categoryCell", for: indexPath)
let person = mangObjArr[indexPath.row]
cell.textLabel?.text = person.categoryName
return cell
[OK]を.. @アテナにその名を置き換え...だからここで私はこれらの行を含めるようにしていますか..? –
この行では、result = try managedContext.fetch(fetchRequest)とし、結果をnilとして取得しています。何か案が..? –
は正しく開始されたmanagedContextオブジェクトですか?もしそうなら、フェッチ要求の結果nilはレコードが見つからなかったことを意味します。 – Athena