Search code examples
uitableviewmodel-view-controllermodelcontrollerviewcontroller

How can I fix this issue in my UITableViewController


This project has no API request, I've had to type out everything from scratch. I have these bugs as, using the MVC patern, I created my model with the corresponding data. The problems shows up when I try to link up everything together. I've added the alerts to each line concerned with this symbol (|!|...).

Sorry in advance for the French :))


This is my Model files:


import Foundation import UIKit

struct FruitBasket { let basketName: String let basketText: String let basketImage: UIImage?

init(basketName: String, basketText: String, basketImage: UIImage?) {
    self.basketName = basketName
    self.basketText = basketText
    self.basketImage = basketImage
}

}


import Foundation import UIKit

struct FruitBasketDetails {

let basket = [FruitBasket(basketName: "Panier Automne", basketText: """

LA CORBEILLE DE FRUITS D’AUTOMNE : UN PANIER POUR LA RENTRÉE

La corbeille de fruits d’automne  est idéale pour la rentrée ! Nous avons choisis pour vous des fruits au coeur de la saison pour vous  faire profiter des meilleurs apports en vitamines et minéraux avec une riche composition de fruits !
Les larges variétés de pommes, de poires et de prunes vous permettront de dynamiser votre organisme pour une rentrée en pleine forme et  faire face aux premiers froids. Les premiers agrumes comme les oranges et les clémentines  vous apporteront, eux, toute la vitamine C nécessaire.
Quant aux raisins, qu’ils soient noirs, verts ou lie-de vin, leurs bienfaits ne sont pus à démontrer ! Riche en antioxydants et polyphénols, ils sont aussi des alliés « détox » appréciés.

…Et que diriez vous d’une petite banane pour la pause de milieu de matinée ?!

""", basketImage: UIImage(named: "automne")), FruitBasket(basketName: "Hiver", basketText: """ LA CORBEILLE DE FRUITS D’HIVER : UN PANIER ACIDULÉ !

Dans la corbeille de fruits d’hiver, les variétés d’agrumes se succèdent en cascade et aide votre organisme à rester en forme ! Les kiwis et les litchis ponctuent leurs saveurs entre les variétés de pommes, de poires et de bananes. Un panier plein d’énergie et de saveurs pour profiter de l’hiver ! """, basketImage: UIImage(named: "panier-hiver")), FruitBasket(basketName: "Printemps", basketText: """ LA CORBEILLE DE FRUITS DE PRINTEMPS : UN PANIER PARFUMÉ !

Cette corbeille de fruits de printemps est composée des dernières variétés d’agrumes comme l’orange maltaises et les clémentines « or ». Leur richesse en vitamine C est bien utile pour passer le changement de saison et faire face aux petits rhumes. Les premières pêches permettent de se réminéraliser et les pommes de s’hydrater en savourant des notes parfumés, sucrées et acidulées. Vous apprécierez faire une pause fraîcheur entre deux dossiers aussi grâce aux poires et aux bananes qui confectionnent cette généreuse corbeille de fruits de printemps ! """, basketImage: UIImage(named: "panier-ete")), FruitBasket(basketName: "ETE", basketText: """ LA CORBEILLE DE FRUITS D’ÉTÉ : UN PANIER HAUT EN COULEURS !

Dans la corbeille de fruits d’été vous retrouverez de rafraîchissantes pêches et nectarines et des abricots faciles à croquer. Les petits fruits antioxydants comme les fraises et les cerises vous feront profiter de toutes leurs saveurs…. à moins que vous ne préféreriez une pomme rafraîchissante ou une banane énergisante ! Profitez de ces fruits stimulants au travail idéalement en milieu de matinée et d’après-midi ! """, basketImage: UIImage(named: "panier-ete"))] }


This is my Controller


class BasketTableVC: UITableViewController {

var basket = FruitBasketDetails()

override func viewDidLoad() {
    super.viewDidLoad()

    title = "Baskets"
    navigationController?.navigationBar.prefersLargeTitles = true
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return basket.count ***(|!| Value of type 'FruitBasketDetails' has no member 'count')***
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Baskets", for: indexPath)
    cell.textLabel?.text = basket[indexPath.row] ***(|!| Value of type 'FruitBasketDetails' has no subscripts)***
    return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedRowName = basket[indexPath.row] ***(|!| Value of type 'FruitBasketDetails' has no subscripts)***
let selectedRowText = basket[indexPath.row] ***(|!|Value of type 'FruitBasketDetails' has no subscripts)***
let selectedImage = basket[indexPath.row] ***(|!| Value of type 'FruitBasketDetails' has no subscripts)***

let basketInfoVC = self.storyboard?.instantiateViewController(identifier: "BasketDetailsView") as! FruitDisplayVC
basketInfoVC.name = selectedRowName
basketInfoVC.text = selectedRowText
basketInfoVC.image = selectedImage

self.navigationController?.pushViewController(basketInfoVC, animated: true)

}

}

Thank you in advance for your help

Take care and stay safe


Solution

  • You are not using the basket data type of FruitBasket.

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

    And this also

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let innerBasketData = basket.basket
    let selectedRowName = innerBasketData[indexPath.row]. basketName 
    let selectedRowText = innerBasketData[indexPath.row]. basketText
    let selectedImage = innerBasketData[indexPath.row]. basketImage
    
    let basketInfoVC = self.storyboard?.instantiateViewController(identifier: "BasketDetailsView") as! FruitDisplayVC
    basketInfoVC.name = selectedRowName
    basketInfoVC.text = selectedRowText
    basketInfoVC.image = selectedImage
    
    self.navigationController?.pushViewController(basketInfoVC, animated: true)
    
    }