테이블 뷰 셀을 탭하면 내 iOS 앱이 빠르게 중단됩니다. 이것은 모두 프로그래밍 방식으로 수행되었습니다. (수동 segue 제외) 내가 셀을 탭하면 Dynamic Cast Call Failed가 발생합니다.다이내믹 캐스트 호출 실패
CoreData, Segue 또는 내 tableview와 관련이 있습니까? 오류는 내가 segue를 작동 시켰을 때만 나타났습니다. 테이블과 CoreData에 대한 동일한 코드가 Storyboard에서 생성 된 테이블과 뷰와 함께 사용되기 전에 (didSelectRowAtIndex
제외) 그런 다음 모든 것이 효과가있었습니다. 불행히도 스토리 보드를 통해 앱을 실행하는 것은 앱의 나머지 옵션에 대한 옵션이 아닙니다.
정말 여기에서 길을 잃었습니다. 필요한 경우 더 많은 코드를 게시 할 수 있습니다.
고맙습니다.
이것은 오류가 발생했습니다.
libswiftCore.dylib`swift_dynamicCastClassUnconditional:
0x1042679e0: pushq %rbp
0x1042679e1: movq %rsp, %rbp
0x1042679e4: testq %rdi, %rdi
0x1042679e7: je 0x104267a1e ; swift_dynamicCastClassUnconditional + 62
0x1042679e9: movabsq $-0x7fffffffffffffff, %rax
0x1042679f3: testq %rax, %rdi
0x1042679f6: jne 0x104267a1e ; swift_dynamicCastClassUnconditional + 62
0x1042679f8: leaq 0xb5109(%rip), %rax
0x1042679ff: movq (%rax), %rax
0x104267a02: andq (%rdi), %rax
0x104267a05: nopw %cs:(%rax,%rax)
0x104267a10: cmpq %rsi, %rax
0x104267a13: je 0x104267a2d ; swift_dynamicCastClassUnconditional + 77
0x104267a15: movq 0x8(%rax), %rax
0x104267a19: testq %rax, %rax
0x104267a1c: jne 0x104267a10 ; swift_dynamicCastClassUnconditional + 48
0x104267a1e: leaq 0x36b3d(%rip), %rax ; "Swift dynamic cast failed"
0x104267a25: movq %rax, 0xb4a2c(%rip) ; gCRAnnotations + 8
0x104267a2c: int3
0x104267a2d: movq %rdi, %rax
0x104267a30: popq %rbp
0x104267a31: retq
0x104267a32: nopw %cs:(%rax,%rax)
이 내 관련 코드 (내가 생각하는) 수정 코드
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("update", sender: self)
println("You selected a cell")
}
편집
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier? == "update" {
var selectedItem: NSManagedObject = myTodos[self.todoTableView.indexPathForSelectedRow()!.row] as NSManagedObject
let IVC: TodoViewController = segue.destinationViewController as TodoViewController
IVC.todoItem = selectedItem.valueForKey("todoItem") as String
IVC.todoTime = selectedItem.valueForKey("todoTime") as NSDate
IVC.existingTodo = selectedItem
}
}
입니다 : 문제가를 전달하는 데 노력에 의해 발생 된 네비게이션 컨트롤러를 통한 세그.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier? == "update" {
var selectedItem: NSManagedObject = myTodos[self.todoTableView.indexPathForSelectedRow()!.row] as NSManagedObject
let navVC = segue.destinationViewController as UINavigationController
//let tableVC = navVC.viewControllers.first as YourTableViewControllerClass
let IVC: TodoViewController = navVC.viewControllers.first as TodoViewController
IVC.todoItem = selectedItem.valueForKey("todoItem") as String
IVC.todoTime = selectedItem.valueForKey("todoTime") as NSDate
IVC.existingTodo = selectedItem
}
}
업데이트 : 코드에서 네 다운 캐스트를 참조
let IVC: TodoViewController = (segue.destinationViewController as UINavigationController).viewControllers.first as TodoViewController
또는
let IVC: TodoViewController = segue.destinationViewController.topViewController as TodoViewController
그래서 중단 점은 다음과 같습니다.) Cool! –
그것은 첫 번째 '하자 IVC : TodoViewController = segue.destinationViewController로 TodoViewController' –
[이것은 실제 문제를 설명했다] (http : // stackoverflow.co.kr/questions/24327267/swift-dynamic-cast-failed-uipageviewcontroller) 나는 길에 내비게이션 컨트롤러가 있습니다. 어느 쪽이든 다운 캐스팅 오류가 발생하거나 내 탐색 막대가 없습니다. 하지만 지금은 작동합니다 :) –