我目前正在处理一个主要ViewController
和另外两个ViewControllers
的应用
一个是我的浏览器工作正常,另一个是TableView
我有5个Buttons
引导我访问我的浏览器,其中一个应该转到我的TableView
我已将Button
与目前模态 segue
关联到我的TableView
控制器(已嵌入NavigationViewController
)。
但每次我按下按钮时模拟器都会崩溃并出现此错误:
libswiftCore.dylib`swift_dynamicCastClassUnconditional:
0x10b9bf860: pushq %rbp
0x10b9bf861: movq %rsp, %rbp
0x10b9bf864: testq %rdi, %rdi
0x10b9bf867: je 0x10b9bf89e ; swift_dynamicCastClassUnconditional + 62
0x10b9bf869: movabsq $-0x7fffffffffffffff, %rax
0x10b9bf873: testq %rax, %rdi
0x10b9bf876: jne 0x10b9bf89e ; swift_dynamicCastClassUnconditional + 62
0x10b9bf878: leaq 0xb52e9(%rip), %rax
0x10b9bf87f: movq (%rax), %rax
0x10b9bf882: andq (%rdi), %rax
0x10b9bf885: nopw %cs:(%rax,%rax)
0x10b9bf890: cmpq %rsi, %rax
0x10b9bf893: je 0x10b9bf8ad ; swift_dynamicCastClassUnconditional + 77
0x10b9bf895: movq 0x8(%rax), %rax
0x10b9bf899: testq %rax, %rax
0x10b9bf89c: jne 0x10b9bf890 ; swift_dynamicCastClassUnconditional + 48
0x10b9bf89e: leaq 0x36b7d(%rip), %rax ; "Swift dynamic cast failed"
0x10b9bf8a5: movq %rax, 0xb4c0c(%rip) ; gCRAnnotations + 8
0x10b9bf8ac: int3
0x10b9bf8ad: movq %rdi, %rax
0x10b9bf8b0: popq %rbp
0x10b9bf8b1: retq
0x10b9bf8b2: nopw %cs:(%rax,%rax)
如果我将segue连接到另一个viewcontroller或者我正在使用其他按钮,它将无法正常工作。
我知道问题出现在这段代码中,因为如果删除它,一切正常:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
var DestViewConroller : WebViewController = segue.destinationViewController as WebViewController
if (segue.identifier == "homeSegue"){
DestViewConroller.url = "https://edu.sh.ch"
}
if (segue.identifier == "mailSegue"){
DestViewConroller.url = "https://edumail.sh.ch/owa"
}
if (segue.identifier == "mensaSegue"){
DestViewConroller.url = "http://kanti.sh.ch/fileadmin/Redaktoren/Service/Mensa/Menueplan.pdf"
}
if (segue.identifier == "absenzenSegue"){
DestViewConroller.url = "https://edu.sh.ch/Lists/Absenzen/Heute%20%20Knftige.aspx"
}
if (segue.identifier == "stundenplanSegue"){
DestViewConroller.url = "https://edu.sh.ch/Informationen/Stundenplaene/SiteAssets/SitePages/Homepage/klassen_03_juli.pdf"
}
}
提前致谢
答案 0 :(得分:2)
错误日志提到
Swift动态演员失败
所以这意味着当swift尝试将segue.destinationViewController
投射到WebViewController
时会出现问题。
仅当destinationViewController
不是WebViewController
时才会发生这种情况。
当应用尝试转换为您提及的tableViewController
时会发生什么。
因此,要修复此错误,您必须在每个if条件中初始化DestViewController
或检查segue的标识符是否不是tableViewController的标识符,然后初始化并转换destinationViewController
。
答案 1 :(得分:1)
导航控制器可能是目的地,因此您必须执行以下操作:
var webViewController = (segue.destinationViewController as?
UINavigationController)?.viewControllers[0] as? webViewController
答案 2 :(得分:1)
segue / dynamic cast failed 问题似乎突然出现,但很容易修复。
如果您的网页视图控制器嵌入UINavigationController
,则segue.destinationViewController
是UINavigationController
实例,而不是DestViewController
实例。
您可能已经保留了导航控制器并替换了这一行:
var DestViewConroller : WebViewController = segue.destinationViewController as WebViewController
用这个:
var DestViewConroller : WebViewController = segue.destinationViewController.topViewController as WebViewController
.topViewController
UINavigationController
属性指的是导航堆栈的顶部,应该是您的DestViewConroller
答案 3 :(得分:0)
问题似乎出现在对象中。
确保您已在故事板中将DestViewConroller
的类设置为WebViewController
。如果不这样做,尽管存在强制转换,DestViewConroller仍将被假定为UIViewController的一个实例。