私はswift 3.0で書かれたプロジェクトで作業しています。私の要件は、いくつかのテキストフィールドに入力したデータをCoreDataに保存し、それらの属性の1つをテーブルビューに取り込むことです。行が選択されると、そのレコードを更新します(テキストフィールドの値を再割り当てします)保存してください)。戻るボタンを押したときにUITableViewのデータが重複する
基本的に私は "Task"という名前のエンティティを持っていて、3つの属性を持っていて、コアデータに保存したこれらの属性(名前)をテーブルビューに読み込みたいとします。したがって、私が入力したデータを編集したいときは、行をタップすると、最初にそれらのデータを入力したViewControllerが表示されます。しかし、データを保存せずに戻るボタンをクリックすると、配列が複製され、テーブルビューに表示されます。どのように私はこれを停止することができます。次のようなテーブルビュークラスのコード。
import UIKit
import CoreData
class TableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var stores = [Store]()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.reloadData()
// Do any additional setup after loading the view.
}
override func viewDidAppear(_ animated: Bool) {
let request = NSFetchRequest <NSFetchRequestResult> (entityName: "Store")
request.returnsObjectsAsFaults = false
do {
let results = try context.fetch(request) as! [Store]
// check data existance
if results.count>0 {
print(results.count)
for resultGot in results {
if let expName = resultGot.name {
print("expence name is :", expName)
stores += [resultGot]
print("my array is : \(stores)")
}
}
self.tableView.reloadData()
}
}catch{
print("No Data to load")
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return stores.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
let store = stores [indexPath.row]
cell.textLabel?.text = store.name
//cell.textLabel?.text = myExpensesArray[indexPath.row]
return cell
}
@IBAction func nextButtonPressed(_ sender: AnyObject) {
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "editStore", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "editStore"{
let v = segue.destination as! ViewController
let indexPath = self.tableView.indexPathForSelectedRow
let row = indexPath?.row
v.store = stores[row!]
}
}
卿私はviewWillAppearからすべてのコードをクリアし、私は私のtableViewをリロードすることになっていますのviewDidLoadにそれらをロードする場合は?新しいエントリを追加したり編集したりすると、新しいエントリや更新されたテーブルがテーブルに表示されなくなるからです。 – danutha
次に、2番目の点に記載されているように、 – jalone