2017-11-06 12 views
1

私のアプリケーションにはViewControllerとListViewControllerの2つのビューコントローラがあります。 View Controllerで完了するフォームがあり、ListViewコントローラは完成したすべてのフォームのテーブルビューを提供します。私はデータを入力したり、データを削除したりすることができますが、編集機能のコーディングには苦労しています。私のことはユーレカを使って作成されていることに注意してください。以下は、情報をコアデータにロードするコードです。テーブルビューによるコアデータの編集

私は引き続きこれに対する答えを見つけます。私は多くのYouTubeの動画を見てきましたが、日付がついているように見えます。新しいバージョンの迅速にマップすることはできません。セグエを使用して

試み:エラー「タイプ 『OTSProcessConfirmations.Type』には添字のメンバーを持っていません」取得のコードの最後の行に

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "editOTS" 
    { 
     let v = segue.destination as! ViewController 

     let indexpath = self.tableView.indexPathForSelectedRow 
     let row = indexpath?.row 

     v.PC = OTSProcessConfirmations[row!] 

    } 

var branch: String = "" 
var enterDate: Date? = nil 
var OTSQ1: Bool = false 
var OTSQ2: Bool = false 
var OTSQ3: Bool = false 
var OTSQ4: Bool = false 
var OTSQ5: Bool = false 
var OTSQ6: Bool = false 
var OTSQ7: Bool = false 
var OTSQ8: Bool = false 
var OTSQ9: Bool = false 
var OTSQ10: Bool = false 
var OTSQ11: Bool = false 
var OTSQ12: Bool = false 
var OTSQ13: Bool = false 
var OTSQ14: Bool = false 

var processConfirmation: OTSProcessConfirmations? 

@IBAction func BtnSave(_ sender: Any) { 



    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

    let ots = OTSProcessConfirmations(context:context) 

    ots.branch = branch 
    ots.enterDate = enterDate 
    ots.otsq1 = OTSQ1 
    ots.otsq2 = OTSQ2 
    ots.otsq3 = OTSQ3 
    ots.otsq4 = OTSQ4 
    ots.otsq5 = OTSQ5 
    ots.otsq6 = OTSQ6 
    ots.otsq7 = OTSQ7 
    ots.otsq8 = OTSQ8 
    ots.otsq9 = OTSQ9 
    ots.otsq10 = OTSQ10 
    ots.otsq11 = OTSQ11 
    ots.otsq12 = OTSQ12 
    ots.otsq13 = OTSQ13 
    ots.otsq14 = OTSQ14 


    // Save the data to coredata 

    (UIApplication.shared.delegate as! AppDelegate).saveContext() 

    navigationController!.popViewController(animated: true) 
} 

リストビューコントローラのコード

import UIKit 

class ListViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{ 

    @IBOutlet weak var tableView: UITableView! 

    var OTSs : [OTSProcessConfirmations] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.dataSource = self 
     tableView.delegate = self 


     // Do any additional setup after loading the view. 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     // get the data from core data 

     getData() 


     /// reload the table view 

     tableView.reloadData() 
    } 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     <#code#> 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return OTSs.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = UITableViewCell() 

     let ots = OTSs[indexPath.row] 

     cell.textLabel?.text = ots.branch! 


     return cell 
    } 
    func getData() { 
     let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

     do { 
      OTSs = try context.fetch(OTSProcessConfirmations.fetchRequest()) 

     } 
     catch{ 
      print("Fetching Failed") 
     } 
    } 

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
     let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
     if editingStyle == .delete { 

      let ots = OTSs[indexPath.row] 
      context.delete(ots) 

      (UIApplication.shared.delegate as! AppDelegate).saveContext() 

      do { 
       OTSs = try context.fetch(OTSProcessConfirmations.fetchRequest()) 
      } 
      catch { 
       print("Fetching Failed") 
      } 
     } 
     tableView.reloadData() 
    } 

} 

答えて

0

誤りがありますかなりクリアな。

コアデータエンティティOTSProcessConfirmationsではなく、選択した行のインスタンスをデータソース配列から取得する必要があります。

v.PC = OTSs[row!] 

ところで、あなたのコードは読みにくいです。クラス名と構造体名は大文字と関数で始まり、変数名は小文字で始まるという命名規則に従ってください。これにより、この種のエラーを回避できます。

特に、コードを共有する場合は、一文字または略語よりもわかりやすい名前を使用してください。

最後に、クラス、構造体、およびコアデータエンティティは、単数形式(OTSProcessConfirmation)で名前が付けられています。

+0

フィードバックいただきありがとうございます。私は私のプロジェクトを再開し、適切な命名のガイドラインに従っていきます。誰もが推薦できる初心者のための参考資料はありますか? –

+0

最も包括的なリファレンスは、[スウィフト言語ガイド](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2です-ID1) – vadian

関連する問題