【问题标题】:Could not cast value of type 'TableViewController' to 'NSString'无法将“TableViewController”类型的值转换为“NSString”
【发布时间】:2019-02-03 09:32:36
【问题描述】:

下面代码的第四行出现以下错误...

线程 1:信号 SIGABRT,输出显示 Could not cast value of type 'JobTableViewController' (0x10a20cb80) to 'NSString' (0x10cc5a2a8)。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "toDetails" {
        let detailController = segue.destination as! JobDetailViewController
        detailController.valueToPass = sender as! String
    }
}

Job.swift:

class Job {
var text: String = ""
let ref: DatabaseReference!

init(text: String) {
    self.text = text
    ref = Database.database().reference().child("jobs").childByAutoId()
}

init(snapshot: DataSnapshot)
{
    ref = snapshot.ref
    if let value = snapshot.value as? [String : Any] {
        text = value["text"] as! String
    }
}

func save() {
    ref.setValue(toDictionary())
}

func toDictionary() -> [String : Any]
{
    return [
        "text" : text,
    ]
}
}

【问题讨论】:

  • 执行此转场的视图控制器的类是什么?你想传递的价值是什么?

标签: ios swift uitableview nsstring segue


【解决方案1】:

您的问题是,在performSegue 中,您将self(类型为JobTableViewController)作为sender 参数发送,如下所示

self.performSegue(withIdentifier: "toDetails", sender: self)

在这里将其转换为

sender as! String

所以转换成

self.performSegue(withIdentifier: "toDetails", sender:"sendedStr")

【讨论】:

  • 对不起,我不知道我是否理解你的意思……我现在需要改变什么?
  • 你的意思是“sentStr”或“senderStr”,错字?
  • 他的意思是你发送的字符串,所以在我的例子中是“valueToPass”,哦,它正在工作,谢谢:)
  • @Carpsen90 正如乔所说的 =D
  • 还有一个问题:当我的发件人只是 ValueToPass,没有 "" ?
猜你喜欢
  • 2019-01-10
  • 2016-06-06
  • 1970-01-01
  • 2021-10-02
  • 2017-09-26
  • 1970-01-01
  • 2021-03-08
  • 2017-04-09
相关资源
最近更新 更多