使用存储在核心数据中的数据将数据从表视图Controller传递到View Controller

时间:2017-12-06 02:29:44

标签: ios swift uitableview core-data

我是一个小新手,我有一个疑问,我有一个TableViewController和另一个ViewController,我有一个detailViewController,我尝试做的是,当在tableview中选择了一个单元格,它在detailViewcontroller中显示存储在该单元格的核心数据中的相应数据。

这是控制tableViewcontroller

的文件
import UIKit

class CostumerTableViewController: UITableViewController {
    var costumerArray:[Costumer] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.reloadData()
        self.fetchData()
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        let name = costumerArray[indexPath.row]
        cell.textLabel?.text = name.costumerName!
        return cell
    }

    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        if editingStyle == .delete {
            let costumerDelete = costumerArray[indexPath.row]
            context.delete(costumerDelete)
            (UIApplication.shared.delegate as! AppDelegate).saveContext()
            do {
                costumerArray = try context.fetch(Costumer.fetchRequest())
            } catch {
                print(error)
            }
        }
        tableView.reloadData()
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let Storyboard = UIStoryboard(name: "Main", bundle: nil)
        let DvC = Storyboard.instantiateViewController(withIdentifier: "costumerDetailViewController") as! costumerDetailViewController
        let n = costumerArray[indexPath.row]
        let Cn = n.costumerName!
        DvC.getCostumerName = Cn
        self.navigationController?.pushViewController(DvC, animated: true)
    }

    func fetchData() {
        // se crea el context
        let  context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        do {  // se hace el request del array
            costumerArray = try context.fetch(Costumer.fetchRequest())
        } catch {
            print(error)
        }
    }
}

在编译中没有给我任何问题,一些一切顺利,问题是它没有在详细viewController标签中提供任何内容,在这种情况下,我尝试从此代码发送数据。< / p>

这是detailViewController代码:

import UIKit

class costumerDetailViewController: UIViewController {
    var getCostumerName = String()

    @IBOutlet weak var labelName: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        labelName.text! = getCostumerName
    }
}

1 个答案:

答案 0 :(得分:1)

首先检查Cn在此行中是否有值或“”。

let Cn = n.costumerName

更改类costumerDetailViewController中的代码,以声明getCostumerName

var getCostumerName = "" //for avoid crash. if value goes nil.

在viewDidLoad中使用Print()并进行调试。

希望这会对你有所帮助。