2016-04-01 2 views
0

У меня есть один ViewController, который содержит 1 SegmentedControl, который имеет три сегмента, и TableView и CollectionView. Когда сегмент выбран, первые два сегмента показывают TableView с двумя различными пользовательскими TableviewCells, а последний показывает CollectionView. Выбор каждого segemet вызывает сетевые функции для загрузки данных для заполнения TableView или CollectionView. Приложение показывает TableView первого сегмента по умолчанию. Проблема в том, что когда я запускаю приложение, приложение вылетает из функции numberOfItemsInSection, поскольку у него нет данных для заполнения. Я думаю, что эта функция называется ресурсом datasource, а свойства делегирования CollectionView устанавливаются как «self» (ViewController). Как мне подойти, чтобы решить эту проблему?UISegmentedControl, содержащий UITableView и UICollectionView

ответ

1

Итак, вы, вероятно, загружая эти данные в словарь JSON или в массив, так что вы можете сначала установить представление таблиц и сбор, не имеют никакого содержания, как так:

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 
    } 
} 

Затем, когда ваши данные поступают, просто заполните массив htmlResponses указанными данными и вызовите tableView.reloadData() и collectionView.reloadData() для просмотра таблиц и просмотра коллекции соответственно.

Даже если вы не используете массивы для хранения ваших данных, концепция такая же. Используйте пустые элементы, чтобы заполнить ваши представления и перезагрузить их, как только вы узнаете, что данные прибыли с сервера.

+0

oh..Thanks. Я забыл, что я объявил эту переменную массива следующим образом. ex) var htmlResponse: [Тип класса]! Я изменил его, и теперь он работает. – woogii

Смежные вопросы