2016-04-01 12 views
0

1つのSegmentedControlを含むViewControllerが1つあります.3つのセグメントとTableViewとCollectionViewがあります。セグメントが選択されると、最初の2つのセグメントは2つの異なるカスタムTableviewCellでTableViewを示し、最後にはCollectionViewが表示されます。各segemetを選択すると、データをダウンロードしてTableViewまたはCollectionViewに移入するためのネットワーク関数が呼び出されます。最初のセグメントのTableViewがデフォルトで表示されます。問題は、私がアプリケーションを起動するとき、それが何のデータも設定されていないので、アプリケーションがnumberOfItemsInSection関数でクラッシュすることです。私はこの関数がデータソースとして呼び出され、CollectionViewの代理プロパティが 'self'(ViewController)として設定されていると思います。この問題を解決するにはどうすればよいですか?一度、その後UITableViewとUICollectionViewを含むUISegmentedControl

class ViewController : UIViewController, UITableViewDataSource, UITableViewDelegate, UICollectionViewDataSource, UICollectionViewDelegate { 
// note that I would recommend separating these into extensions on ViewController 

    var htmlResponses = []() 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return htmlResponses.count 
     // htmlResponses is empty at this point 
    } 

    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

     return htmlResponses.count 
     // htmlResponses is empty at this point 
    } 
} 

:あなたは、最初はそうのような内容を持たないために、テーブルとコレクションビューを設定することができるように

答えて

1

オクラホマので、あなたはおそらく、JSON辞書に、または配列にこのデータをダウンロードしていますデータが入力されたら、htmlResponses配列に前記データを入力し、テーブルビューとコレクションビューにそれぞれとcollectionView.reloadData()を呼び出します。

データを格納するために配列を使用しない場合でも、概念は同じです。空の要素を使用してビューを生成し、サーバーからデータが到着したことを知った後で再ロードします。

+0

oh..Thanks。私はこのような配列変数を宣言するのを忘れてしまった。例)var htmlResponse:[クラスタイプ]!私はそれを変更し、今すぐ動作します。 – woogii

関連する問題