2016-08-24 7 views
1

私はSwiftを使用していますが、iOS 8のバグを修正しています.xibでビューコントローラを作成しました。たとえば、ビューコントローラとその中のテーブルビューです。iOS8 Swiftはxibでビューコントローラを作成できません

これは私の.xibファイルを作成した方法です。

1.IドラッグのtableViewビューに、ファイルの所有者enter image description hereenter image description here 2.setファイルの所有者のクラス、enter image description here 3.dragファイルの所有者enter image description here 4.dragのtableViewに表示して、私はこのコードを持っていますファイルの所有者で

class BicycleServiceInfoController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutLet tableView: UITableView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.delegate = self 
     tableView.dataSource = self 
    } 

    //other functions 
    ... 
} 

しかし、私はiOSの8.4で、このアプリを実行すると、このビューコントローラを提示しようとすると、それはクラッシュします。 Xcodeは「オプション値をアンラッピングしている間に予期せずnilが見つかりました」と言っています。これは、このコードでtableViewがnilであるためです。でも、iOS 9でもうまくいきます。

誰かが私を助けることができますか?

+2

を、どのようにあなたはViewControllerを自分自身を作成するのですか? – ogres

答えて

0

viewWillAppear関数でデリゲートを設定します。またはインターフェイスビルダーで。 iOS 8には、必要以上に画面を作成する問題があります。

2
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { 
    let classString = String(describing: type(of: self)) 
    if Bundle.main.path(forResource: classString, ofType: "nib") == nil { 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } else { 
     super.init(nibName: nibNameOrNil ?? classString, bundle: nibBundleOrNil) 
    } 
} 
required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

iOS 8では、iOS 9以降でこのメソッドを呼び出す必要があります。 あなたはトニンはすでに正しい答えを提供答えhere

+0

それは私だけですか、または閉じ括弧が多すぎますか?それとも、フォーマットが悪いですか? – jww

+1

これは正しい答えです。問題を修正します。ありがとう! – OutOfBounds

1

を得ることができますが、スウィフト2.3にこれを変換する闘争皆のために、ここであなたが行く:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
    let classString = String(MyClassName) 
    if NSBundle.mainBundle().pathForResource(classString, ofType: "nib") == nil{ 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } else { 
     super.init(nibName: nibNameOrNil ?? classString, bundle: nibBundleOrNil) 
    } 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 
関連する問題