2016-04-11 4 views
0

У меня проблема: Я делаю приложение, подобное Pokédex, которое отображает список всех 721 Pokémon на первой вкладке и другой список на второй вкладке, содержащей My Favorite Pokémon. По сути, есть два идентичных ViewControllers, подключенных к моему TabBar.UITableViewCells не отображается во второй вкладке

Мой раскадровка выглядит следующим образом: Storyboard

Так вот проблема: TableView на первом (и начальная) вкладка работает отлично. Однако, когда я загружаю TableView на второй вкладке, Pokémon загружаются, но не отображаются. Я могу щелкнуть TableViewCell и перейти на страницу подробностей, но ярлык в TableViewCell ничего не показывает.

Favorites View Pokédex View

Это код я использую для загрузки Избранное TableView

class FavoritesViewController: BaseViewController, 
UITableViewDataSource, UITableViewDelegate { 

@IBOutlet var FavoritesListView: UITableView! 

var pokemonList: [String] = ["Nothing Here!"] 



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("FavoriteCell", forIndexPath: indexPath) as! FavoriteCell 

    var name = pokemonList[indexPath.row] 

    capitalizeFirstLetter(&name) 

    cell.nameLabel.text = name 

    return cell; 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return pokemonList.count 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    print(pokemonList[indexPath.row]) 

    self.performSegueWithIdentifier("ToPokemonDetail", sender: pokemonList[indexPath.row]) 
} 




override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if(segue.identifier == "ToPokemonDetail"){ 
     let destination = segue.destinationViewController as! PokemonDetailViewController 
     let thisPokemon = sender as! String 

     destination.currentPokemon = thisPokemon 
    } 
} 

override func viewWillAppear(animated: Bool) { 
    FavoritesListView.reloadData() 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    // Fetch the cached list, getNames returns an array of strings 
    let list = utility.getNames("Favorites") 

    pokemonList = list 

} 

Делегат и DataSource устанавливаются с помощью раскадровки.

Приведенный выше код работает и показывает список избранного только в порядке. Класс для полного Pokédex имеет аналогичную конструкцию.

Я попытался переключить избранное и Pokédex вокруг, чтобы он показывал полный список Pokémon при запуске. Все 721 Pokémon показаны правильно, но затем «Избранное» не отображаются.

Что еще я пробовал:

  • Проверка Повторное использование идентификаторов, снова и снова
  • Ссылки на выходы должны быть связаны правильно
  • Вызов TableView.reloadData() в методе viewDidAppear
  • Switching вокруг таблеток

Кто-нибудь знает, что здесь происходит? Не стесняйтесь задавать больше вопросов

Edit: это то, что происходит, когда я поменять местами две TabBar кнопки вокруг, код не изменяется

GitHub Project Here

+0

Является ли ваша ячейка для строки при вызове IndexPath или связаны делегаты? –

+0

Вы можете показать код позади этого? – Mehul

+0

Откуда и когда вы забираете свой Fav? Он должен получить данные перед перезагрузкой таблицы. –

ответ

0

Возможно, делегат вашей таблицы и dataSource не установлены.

table.delegate = self 
table.dataSource = self 

Конечно, это после того, как вы добавите свойства к контроллеру вида

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
+0

Делегат и источник данных устанавливаются через раскадровку. Пожалуйста, взгляните на мой обновленный вопрос. Я добавил код за одним из TableViewControllers – Baksteen

+0

О, извините. Я оставлю свой ответ опубликованным, если он поможет кому-то еще. – penatheboss

3

Проблема в раскадровке рамке этикетки клетки. Установите ограничения для контроллера вида для (любого, любого) класса размера. Я могу зафиксировать код в github, если вы можете дать мне права на запись в свой git. Благодаря

0

Ваше число строк всегда 0 для этого контроллера, я посмотрел в свой код счетчика pokemonList всегда 0 его не обновляет данные в ней

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return pokemonList.count 
} 
0

Большой проблемой является ваш PokemonDetailViewController не UITableViewController , Он должен зависеть от UITableViewDataSource, UITableViewDelegate, а затем быть подключен к представлению раскадровки для предоставления данных и форматирования для таблицы.

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