使用存储在核心数据中的数据将数据从表视图控制器传递到视图控制器
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?
任何值我不知道为什么,我尝试在控制台中打印以设置值并且不显示任何值以上是关于使用存储在核心数据中的数据将数据从表视图控制器传递到视图控制器的主要内容,如果未能解决你的问题,请参考以下文章