核心数据快速求助未将数据推送到第二个视图控制器 [英] core data swift sugue not pushing data to second view controller

查看:73
本文介绍了核心数据快速求助未将数据推送到第二个视图控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表格视图,我想选择一个项目,并让它在第二个视图控制器中显示该项目的所有数据。这是我要使用的代码。

I have a table view and I want to select an item and have it show all the data for that item in a second view controller. This is my code I am trying to use.

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "showTea"){
        let selectedIndexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()!
        let genView:genViewController = segue.destinationViewController as genViewController
        genView.teaname = selectedIndexPath

我收到以下错误。 NSIndexPath不能转换为 UILabel,我敢肯定我缺少一些简单的东西,但我没有发现它的含义。

I get the following error. 'NSIndexPath' is not convertible to 'UILabel' I am sure I am missing some thing simple but I have not found what it is.

我用这种方式保存数据。

I save the data this way.

    @IBAction func addItem(sender: AnyObject) {
    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext!
    let en = NSEntityDescription.entityForName("Items", inManagedObjectContext: context)
    var newItem = dataModel(entity: en!, insertIntoManagedObjectContext: context)
    newItem.name = Name.text
    newItem.type = Type.text
    newItem.amount = qty.text
    newItem.temp = temp.text
    newItem.time = time.text

    context.save(nil)

    self.navigationController?.popViewControllerAnimated(true)

}

感谢所有帮助。不知道这是否是完成它的最佳方法,但它是否有效。

Thanks for all the help. Not sure if this the best way to get it done but it works. genViewContorller below.

var myData: Array<AnyObject> = []
@IBOutlet var name: UILabel!
@IBOutlet var type: UILabel!
@IBOutlet var qty: UILabel!
@IBOutlet var temp: UILabel!
@IBOutlet var time: UILabel!

var row: Int = 0
var tn: String = ""
var ty: String = ""
var qtyl: String = ""
var templ: String = ""
var timel: String = ""

override func viewDidLoad() {
    super.viewDidLoad()

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext!
    let freq = NSFetchRequest(entityName: "Items")
    myData = context.executeFetchRequest(freq, error: nil)!
    var data: NSManagedObject = myData[row] as NSManagedObject
    var ty = data.valueForKey("type") as String
    var tn = data.valueForKey("name") as String
    var qtyl = data.valueForKey("amount") as String
    var templ = data.valueForKey("temp") as String
    var timel = data.valueForKey("time") as String
    self.name.text = "\(tn)"
    self.type.text = "\(ty)"
    self.qty.text = "\(qtyl)"
    self.temp.text = "\(templ)"
    self.time.text = "\(timel)"

我正在获取通过segue传递的行值,并使用它来获取该行中每个字段的值。

I am taking the row value that is being passed via the segue and using it to get the values for each field in that row.

推荐答案

您正试图将 NSIndexPath 分配给 UILabel 。编译器错误非常明显。

You are trying to assign a NSIndexPath to a UILabel. The compiler error is pretty clear.

请注意,您不能直接更新 @IBOutlets ,因为它们不是设置(它们仍然 nil )。您需要将值存储在目标视图控制器的属性中,然后在 viewDidLoad 中更新标签。

Note that you can't update @IBOutlets directly because they aren't set up yet (they are still nil). You will need to store your value in a property in the destination view controller, and then update your label in viewDidLoad.


  1. genViewController 中添加属性以保存您的值。

  1. Add a property in genViewController to hold your value.

var row: Int = 0


  • 设置值在 prepareForSegue 中。

    genView.row = selectedIndexPath.row
    


  • ViewDidLoad 中> genViewController 设置标签:

  • In ViewDidLoad in genViewController set up your label:

    self.teaname.text = "I came from row \(row)"
    


  • 这篇关于核心数据快速求助未将数据推送到第二个视图控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆