2017-02-18 4 views
0

は、私はそのようなプログラムで、テーブルビューと検索バーを作成しよう:スウィフト - 作成ビューは、プログラム

class SearchViewController: UIViewController { 

    weak var tableView: UITableView! 
    weak var srchBar: UISearchBar! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.createUserInterface() 
     self.createConstraints() 

    } 

    func createUserInterface(){ 

     self.tableView = UITableView() 
//  tableView.dataSource = self 
//  tableView.delegate = self 
     self.view.addSubview(tableView) 

     self.srchBar = UISearchBar() 
     self.view.addSubview(self.srchBar) 
    } 



    func createConstraints() { 

     tableView.snp.makeConstraints { (make) in 

      make.top.equalTo(srchBar.snp.bottom) 
      make.left.right.bottom.equalTo(self.view) 
     } 

     srchBar.snp.makeConstraints { (make) in 
      make.top.left.right.equalTo(self.view) 
     } 

    } 

生憎、私はコンソールにエラーが発生しました:致命的なエラー:予期せずオプションの値

をアンラップしながら、nilを見つけます

そして、そのようなエラー: enter image description here

+0

なぜ「弱い」参照ですか?それは目的ですか? – luk2302

答えて

1

srchBar変数はweakとして宣言されているので、あなたはこのエラーを取得しています。

weak変数は保持カウントをインクリメントしないため、サブビューとして追加する前に割り当て解除されます。

let searchBar = UISearchBar() 
view.addSubview(searchBar) 
self.srchBar = searchBar 

よう

何かがクラッシュを避ける必要があります。

+0

ありがとう、しかし、そのヴァールはスーパービューに属していませんか?なぜ彼らは割り当てを解除されますか? –

+0

ですが、スーパービューに追加する前に 'self.srchBar = UISearchBar()'を宣言しています。したがって、サブビューとして追加する前に解放されます。 obj-Cの –

+0

では、オブジェクトを追加する前にオブジェクトを割り当てます。それ以外の場合は、既存のオブジェクトを表示するためにどのように追加できますか? –

関連する問題