Swift ViewController 没有名为的成员
Swift ViewController does not have member named
好的,我已经浏览了所有可能处理此问题的线程,其中 none 似乎解决了我的问题。
基本上,我有一个包含核心数据的 table 视图设置,当我进入下一个视图控制器时,我想传递一些数据。如您所知,传递的数据必须已经在目标视图控制器中声明,它就是这样。但是我一直收到错误消息说 ViewController 没有成员名称 nItem(我传递的变量)。
这是处理从 table 视图控制器传递数据的代码部分:
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.
}
非常感谢任何帮助。提前致谢。
将非可选值分配给可选值 属性 应该会按预期工作。但是你似乎混淆了你的 class 个名字。
从您的 prepareForSegue
可以明显看出目标视图控制器的 class 是 ViewController
。然而,在你的 class 文件中,你写的是 UIViewController
的子 class 称为 addEditMedVC
(它看起来更像是一个变量名而不是通常大写的 class 名称)。
-> 将 class 重命名为 ViewController
。
更改以下代码:
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
好的,我已经浏览了所有可能处理此问题的线程,其中 none 似乎解决了我的问题。
基本上,我有一个包含核心数据的 table 视图设置,当我进入下一个视图控制器时,我想传递一些数据。如您所知,传递的数据必须已经在目标视图控制器中声明,它就是这样。但是我一直收到错误消息说 ViewController 没有成员名称 nItem(我传递的变量)。
这是处理从 table 视图控制器传递数据的代码部分:
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.
}
非常感谢任何帮助。提前致谢。
将非可选值分配给可选值 属性 应该会按预期工作。但是你似乎混淆了你的 class 个名字。
从您的 prepareForSegue
可以明显看出目标视图控制器的 class 是 ViewController
。然而,在你的 class 文件中,你写的是 UIViewController
的子 class 称为 addEditMedVC
(它看起来更像是一个变量名而不是通常大写的 class 名称)。
-> 将 class 重命名为 ViewController
。
更改以下代码:
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