使用存储在核心数据中的数据将数据从表视图控制器传递到视图控制器

Posted

技术标签:

【中文标题】使用存储在核心数据中的数据将数据从表视图控制器传递到视图控制器【英文标题】:pass data from a table view Controller to View Controller using data stored in core data 【发布时间】:2017-12-06 02:29:44 【问题描述】:

我是一个小新手,我有一个疑问,我有一个TableViewController 和另一个ViewController,我有一个detailViewController,我尝试做的是当在@ 中选择一个单元格时987654324@,它在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标签中显示任何内容,在这种情况下我尝试从该代码发送数据。

这是detailViewController 代码:

import UIKit

class costumerDetailViewController: UIViewController 
    var getCostumerName = String()

    @IBOutlet weak var labelName: UILabel!

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

【问题讨论】:

为什么要在第二个控制器中创建字符串对象“var getCostumerName = String()”?只需将其声明为类型“var getCostumerName:String?” . 【参考方案1】:

首先检查Cn 在此行上有值或“”。

let Cn = n.costumerName

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

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

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

希望这会对您有所帮助。

【讨论】:

当我更改 var getCostumerName:String? 因为 Xcode 说添加!在这一行 labelName.text! = getCostumerName! 我收到此错误线程 1:致命错误:在展开可选值时意外发现 nil 你打印DvC.getCostumerName,它有值还是nil? 任何值我不知道为什么,我尝试在控制台中打印以设置值并且不显示任何值

以上是关于使用存储在核心数据中的数据将数据从表视图控制器传递到视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 viewcontroller tableview 传递到另一个视图控制器

将标签数据从表视图传递到另一个视图控制器

如何将数据从表视图传递到另一个视图控制器

如何将不同的数据从表视图传递到另一个视图控制器

如何将标签中的数据从表视图行操作发送到视图控制器?

如何以编程方式将数据从表视图控制器传递到另一个控制器? [复制]