Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:PrepareForSegue,Swift铸造失败_Ios_Xcode_Uitableview_Swift - Fatal编程技术网

Ios Swift:PrepareForSegue,Swift铸造失败

Ios Swift:PrepareForSegue,Swift铸造失败,ios,xcode,uitableview,swift,Ios,Xcode,Uitableview,Swift,我想在我的TableViewController中选择一个单元格。单元格的文本应通过segue传输到FirstViewController的标签。我总是得到下面显示的错误 标识符是正确的 我的代码: override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { if (segue.identifier == "BackToCalculator") { //let myRow =

我想在我的
TableViewController
中选择一个单元格。单元格的文本应通过segue传输到FirstViewController的标签。我总是得到下面显示的错误

标识符是正确的

我的代码:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "BackToCalculator") {
        //let myRow = tableView.indexPathForSelectedRow().row+1
        let vc = segue.destinationViewController as FirstViewController
        vc.SelectedBundesland.text = "Test"
    }
}
例外情况:

0x103f1f5dc:jne 0x103f1f5d0;swift_DynamicCastClass无条件+48 0x103f1f5de:leaq 0x3364d(%rip),%rax;“Swift动态强制转换失败” 0x103f1f5e5:movq%rax,0xa456c(%rip);gCRAnnotations+8 0x103f1f5ec:int3
0x103f1f5ed:movq%r14,%rax


怎么了?

可能在比赛中迟到了,但得到了完全相同的问题。
这里的问题是,您的Segue指向的是选项卡控制器,而不是它需要跳转到的实际ViewController。我指的是你提供给安东尼奥的第二张截图。如果你修复了它,它应该可以正常工作。

检查你的故事板,我认为你错误地将segue“指向”了另一个viewController。

我也有一个类似的错误-我相信
segue.destinationViewController
在这里是一个
UINavigationController
。出现错误是因为您试图将UINavigationController强制转换到FirstViewController类中

更改此行:
将vc=segue.destinationViewController设为FirstViewController

为此:
让vc=segue.destinationViewController.topViewController作为FirstViewController

.topViewController
是导航堆栈上的顶视图控制器-现在应该是
FirstViewController的一个实例

self.performSegueWithIdentifier("BackToCalculator", sender: self)

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {

    if (segue.identifier == "BackToCalculator") {
        //let myRow = tableView.indexPathForSelectedRow().row+1
        let vc = segue.destinationViewController as FirstViewController
        vc.SelectedBundesland.text = "Test"
}

u需要调用Surviv.PrPrimeSeGueUnjistabor,

一种更安全和更前沿的方法是条件转换,或者甚至更好的基于协议的考虑如下:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if let vc = segue.destinationViewController as? FirstViewController {
        vc.SelectedBundesland.text = "Test"
    } else {
       print("Some other controller! \(segue.destinationViewController)")
    }
}
这当然有效。但是,如果您有多个Segue和多个viewController,那么在其中转换信息和数据可能会非常痛苦

考虑议定书方法:

protocol BundeslandProtocol {
    var SelectedBundesland: String {get set}
}

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if var vc = segue.destinationViewController as? BundeslandProtocol {
        vc.SelectedBundesland.text = "Test"
    }
}
要实现上述功能,您只需声明UIViewController符合上述协议:

class AwesomeViewController: UIViewController, BundeslandProtocol {
 .... 
}
随着时间的推移,您将能够重命名类、更改类、替换和扩展项目,并且只要协议保持其用途,您就不必关心更改引用

要知道代码在哪里被破坏并不容易:当您忘记在故事板中设置类名(在您的例子中是FirstViewController)时,通常会发生这种情况。对于执行segue的控制器,请参见屏幕截图,必须设置它,而不是UIViewController通用类


可能问题在于目标视图控制器不是
FirstViewController
的实例-您检查过吗?哪一行引发异常?您能告诉我如何实现DestinationViewController是FirstViewController的实例吗?我不熟悉斯威夫特。提前感谢这比swift更重要的是iOS开发——我猜你甚至不知道如何在objective-c中做到这一点。因此,我建议阅读一些文档,阅读一些教程,比如,和网站上的其他内容——或者只是谷歌。但这已不再必要。在斯威夫特中有这样的方法吗?不,你不需要在斯威夫特中这样做。删除作为FirstViewController的
强制转换,在下一行中放置一个断点,并检查
vc的实际类型-我认为要这样做,您必须将
vc.SelectedBunesland.text=“Test”
行注释掉。