【问题标题】:Instance member '' cannot be used on type '' prepareForSegue实例成员 '' 不能用于类型 '' prepareForSegue
【发布时间】:2016-01-01 20:24:24
【问题描述】:

我之前尝试过理解这个错误。我希望有些东西还没有初始化,但我不知道如何解决这个问题。

prepareForSegue 中这是错误的:

实例成员“选择”不能用于类型 lastVC

我有以下应用:

这个想法是存储在每个视图中选择的选项,并将信息发送到整个prepareForSegue 中的lastVC。我有这段代码,但它不能正常工作。

VC1 类:

UIViewController {
    var choice : MyChoices?

    @IBOutlet weak var nextOutlet: UIButton!
    @IBOutlet weak var colourLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        nextOutlet.hidden = true
    }

    @IBAction func redButton(sender: AnyObject) {
        nextOutlet.hidden = false
        colourLabel.text = "Red colour selected"
        choice.color = "Red"
    }

    @IBAction func blueButton(sender: AnyObject) {
        nextOutlet.hidden = false
        colourLabel.text = "Blue colour selected"
        choice.color = "Blue"
    }

    @IBAction func greenButton(sender: AnyObject) {
        nextOutlet.hidden = false
        colourLabel.text = "Green colour selected"
        choice.color = "Green"
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let lastVC = segue.destinationViewController as! lastVC
        lastVC.choice = self.choice
    }
}

VC2 和 VC3 与 VC1 相同(相同的插座和按钮)

lastVC {
    var choice : MyChoices?

    @IBOutlet weak var colourLabel: UILabel!
    @IBOutlet weak var styleLabel: UILabel!
    @IBOutlet weak var sizeLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
}

以及最后一个存储字符串的类

import UIKit

class MyChoices {
    var colour : String?
    var style : String?
    var size : String?
}

【问题讨论】:

  • 请正确突出显示。
  • 另外,请复制并粘贴您收到的整个错误消息。
  • 什么时候失败?从第一个转场开始?
  • 感谢您的时间兄弟

标签: ios iphone swift


【解决方案1】:

在转换 lastVC 之前,您应该在 prepareForSegue 方法中检查您的 segue 标识符。我认为您的 prepareForSegue 方法会尝试将所有 VC 转换为 lastVC,因此每次都会崩溃。尝试检查您的 segue 标识符。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "YourSegueIdentifier" {
        let lastVC = segue.destinationViewController as! lastVC
        lastVC.choice = self.choice
    }
}

【讨论】:

  • 谢谢mernchik!!!!这个问题就解决了。现在 lastVC 中什么也没有出现(标签为空)。这是我的按钮的代码: redButton: nextOutlet.hidden = false colourLabel.text = "Red color selected" selection?.colour = "Red"
  • 和 lastVC 中的 viewDidLoad 看起来像这样: colourLabel.text = choice?.colour styleLabel.text = choice?.style sizeLabel.text = choice?.style
【解决方案2】:

尝试初始化 myChoices 的新实例并尝试将其传递给 lastVC.choice

并且:你应该在你的 myChoices 类中添加一个方便的 init 或者创建一个结构体

【讨论】:

  • 谢谢你的时间兄弟
猜你喜欢
  • 2015-11-27
  • 2016-05-23
  • 2016-09-09
  • 2020-01-16
  • 2017-06-25
  • 2016-07-05
  • 2017-01-25
  • 2019-02-15
相关资源
最近更新 更多