Swift ViewController没有名为的成员

时间:2015-03-09 05:05:53

标签: variables swift core-data member

好的,我已经完成了所有应该解决这个问题的线程,但似乎没有一个能解决我的问题。

基本上我有一个带核心数据的tableview设置,当我进入下一个视图控制器时,我想传递一些数据。如您所知,传递的数据必须已在目标视图控制器中声明。但我一直收到错误,说ViewController没有成员名称nItem(我传递的变量)。

以下是处理从表视图控制器传递数据的代码部分:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.

    if segue.identifier == "editCurrentMed" {
        let cell = sender as UITableViewCell
        let indexPath = tableView.indexPathForCell(cell)
        let addEditMedVC : ViewController = segue.destinationViewController as ViewController
        let nItem : Meds = frc.objectAtIndexPath(indexPath!) as Meds
        addEditMedVC.nItem = nItem
    }

}

这是我的视图控制器的顶部部分,它声明变量以及视图加载部分,因为它可以在编辑数据时访问它。

import UIKit
import CoreData

class addEditMedVC: UIViewController {

    var nItem : Meds? = nil

    @IBOutlet weak var medName: UITextField!
    @IBOutlet weak var dosage: UITextField!
    @IBOutlet weak var timeToTake: UISegmentedControl!

    override func viewDidLoad() {
        super.viewDidLoad()

        if nItem != nil {
        medName.text = nItem!.name
        dosage.text = nItem!.dose
        nItem!.time = "Morning"
        }

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

非常感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

为可选属性分配非可选值应该按预期工作。但是你似乎混淆了你的班级名称。

从您的prepareForSegue可以看出,目标视图控制器的类是ViewController。但是,在您的类文件中,您编写的是UIViewController的子类addEditMedVC(它看起来更像是变量名而不是通常大写的类名)。

- >将您的班级重命名为ViewController

答案 1 :(得分:0)

更改以下代码:

let addEditMedVC : ViewController = segue.destinationViewController as ViewController
    let nItem : Meds = frc.objectAtIndexPath(indexPath!) as Meds
    addEditMedVC.nItem = nItem

此代码有效:

let vc : addEditMedVC = segue.destinationViewController as addEditMedVC
    let nItem : Meds = frc.objectAtIndexPath(indexPath!) as Meds
    vc.nItem = nItem