20862


storyboardの遷移でエラーが出ます。調べても解決しなかったため、質問させて頂きます。

<<目的>>  
ViewControllerからListViewControllerへ遷移させたい。

<<失敗箇所>>  
ViewControllerのs.instantiateViewControllerWithIdentifierの行

<<エラー内容>>  
Unknown class LlistViewController in Interface Builder file.  
Could not cast value of type 'UITableViewController' (0x1082ed7f8) to
'ListViewController' (0x1051a7f40).

尚、ListViewController.storyboardのStoryboardIDには ListViewControllerと設定している

<<詳細>>

ViewController.swift

[code]

        func onClick() {
            let s = UIStoryboard(name: "ListViewController", bundle: nil)
            let vc = s.instantiateViewControllerWithIdentifier("ListViewController") as! ListViewController
            self.navigationController?.pushViewController(vc, animated: true)
    
        }
    
[/code]

ListViewController.swift

[code]

    import Foundation
    import UIKit
    
    class ListViewController: UITableViewController, UITextViewDelegate {
    
        @IBOutlet weak var image: UIImageView!
        @IBOutlet weak var label_title: UILabel!
    
        override func viewDidLoad() {
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
    }
    
[/code]

[![ListViewController.storyboardの画面](https://i.stack.imgur.com/EKS0B.png)](https://i.stack.imgur.com/EKS0B.png)


CC BY-SA 3.0
2016-01-12T11:59:08.963
20860
2016-01-12T22:16:28.937
2016-01-12T22:16:28.937
8044
13175
question
ios swift
storyboardの遷移でエラーが出ます。(segueを使用しない方法で実装)


_Unknown class LlistViewController in Interface Builder file.  
Could not cast value of type 'UITableViewController' (0x1082ed7f8) to
'ListViewController' (0x1051a7f40)._  
私が今まで見た全ての事例でこのようなエラーが出た場合には、1つの例外もなく100%がStoryboardへのCustomClassの設定ミスでした。

_尚、ListViewController.storyboardのStoryboardIDには ListViewControllerと設定している_  
StoryboardIDというのは、複数のオブジェクトを区別するためにつける単なる目印となる文字列ですので、それと生成されるクラスとは関係ありません。

問題は画面写真でStoryboard IDの上に写っているこの内容の部分です。  
**Custom Class**  
Class [ListViewController]  
Module [None]

Storyboardからインスタンスを作成する場合に、NibLoaderは"ListViewController"と言う正式名称を持つクラスを探しに行きますが、あなたのプロジェクトの中にはそんな名前のクラスはないので、Storyboardに貼り付けられた部品の属性から最も適当と思われるクラス(今回の場合UITableViewController)のインスタンスを作ります。ところが、それをListViewControllerに強制キャストしようとしているので、そこでキャスト落ちしているわけです。

Swiftで書いたクラスの正式名称(Javaで言うところのFQCN)には、(@objcなどを付加しない限り)クラス名の前にモジュール名が入り、"{ProductModuleName}.ListViewController"と言った感じになります。つまり、自分がSwiftで書いたクラスをstoryboard中に指定する場合には、Moduleの部分をNoneにしてはいけません。

Storyboardの該当部分を修正し、Moduleの部分を正しく指定して実行しなおしてみてください。(あるいは、`@objc(クラス名)`と言ったアノテーションを付加して、モジュール名のない`クラス名`を正式のクラス名にしてしまうという手もあります。)


CC BY-SA 3.0
2016-01-12T12:31:46.000
20862
2016-01-12T12:31:46.000
13972
20860
answer