Partage
  • Partager sur Facebook
  • Partager sur Twitter

nom de fichiers dans une tableView

6 avril 2019 à 20:19:30

Bonjour,

J'ai crée une petite application de quizz. Lorsque qu'on lance l'application il récupère tous les fichiers et dossier contenu dans le dossier vocabulaire

Puis il affiche une tableview contenant les noms des fichiers et dossier, par exemple

arborescence:

- vocabulaire

-- q1

--- serie.q1.questions1

--- serie.q1.questions2

-- q2

--- serie.q1.questions1

Dans la tableView il est censé m'afficher

En section q1 et q2

En cellule les contenus des dossiers q1 et q2.

Après on sélectionne une cellule puis on passe dans une autre view

Problème:

Une fois installé je lance l'application et tout fonctionne parfaitement mais après un énième lancement de l'application elle plante elle n'arrive plus à la première view.


Code de la première vue:


//
//  ViewController.swift
//  Vocabulaire
//

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    
    @IBOutlet weak var tableView: UITableView!{
        didSet {
            tableView.dataSource = self
            tableView.delegate = self
        }
    }
    
    struct Cellules {
        var sections: String!
        var items: [String]!
    }
    
    var pathFiles = [URL]()
    
    var objectsArray = [Cellules]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        do {
            let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
            let Path = documentURL.appendingPathComponent("vocabulaire").absoluteURL
            let directoryContents = try FileManager.default.contentsOfDirectory(at: Path, includingPropertiesForKeys: nil, options:[])
            
            for f in 0..<directoryContents.count {
                var nameFiles = [String]()
                let files = try FileManager.default.contentsOfDirectory(at: directoryContents[f], includingPropertiesForKeys: nil, options:[])
                for i in 0..<files.count { nameFiles.append(files[i].lastPathComponent) }
                objectsArray.append(Cellules(sections: directoryContents[f].lastPathComponent, items:nameFiles))
            }
            
            print(objectsArray)
            
        } catch { print(error.localizedDescription)}
    }
    

        

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath as IndexPath) as UITableViewCell
        cell.textLabel?.text = objectsArray[indexPath.section].items[indexPath.row]
        return cell
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return objectsArray[section].items.count
    }
    
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return objectsArray.count
    }
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return objectsArray[section].sections
    }

  
//    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
//        return 1
//    }
//
//    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//        return nameFiles.count
//    }
//
//    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath as IndexPath) as UITableViewCell
//
//        cell.textLabel?.text = nameFiles[indexPath.row]
//
//        return cell
//    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        performSegue(withIdentifier: "makingtransition", sender: indexPath)
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?){
        //let svc = segue.destination as! SecondViewController
        let ip = sender as! IndexPath
        print("s: " + String(ip.section) + " - " + "r: " + String(ip.row) )
        
    }

}

-
Edité par soraka 6 avril 2019 à 20:24:13

  • Partager sur Facebook
  • Partager sur Twitter
9 avril 2019 à 10:47:08

Salut, tu dis "elle plante", c'est à dire ? C'est quoi le message d'erreur associé ? ça plante sur quelle ligne ?

        let ip = sender as! IndexPath

Ce ne serait pas ça le problème par hasard ? Ça m'étonnerait que sender soit un IndexPath

-
Edité par Geda 9 avril 2019 à 10:52:44

  • Partager sur Facebook
  • Partager sur Twitter
9 avril 2019 à 12:37:33

Bonjour,

Je suis sur ma tablette une fois l'application installé, je ne suis plus sur xcode.

Je suis sur l'écran de "bureau" là ou il les icônes des applications et notamment celle de mon application, quand je clique dessus (avec le doigt), une fenêtre s'ouvre puis se referme me ramenant sur l'écran des icônes.

Je vais voir la ligne que vous dites qui pourrait posé problème.

  • Partager sur Facebook
  • Partager sur Twitter
9 avril 2019 à 14:27:11

Si tu lances l'app sur ta tablette depuis XCode, tu seras en debug et tu auras accès à tous les outils de debug. Si tu l'installes depuis Testflight ou autre du même genre, effectivement, tu ne pourras pas debugger. Mais si tu ne peux pas debugger je peux pas t'aider non plus.

C'est peut-être un problème de certificat ou que sais-je. Lorsqu'il y a un problème il faut debugger, il n'y a pas d'autres solutions. Le pif ça ne marche pas.

  • Partager sur Facebook
  • Partager sur Twitter
18 avril 2019 à 10:38:44

Geda a écrit:

Salut, tu dis "elle plante", c'est à dire ? C'est quoi le message d'erreur associé ? ça plante sur quelle ligne ?

        let ip = sender as! IndexPath 

Ce ne serait pas ça le problème par hasard ? Ça m'étonnerait que sender soit un IndexPath

-
Edité par Geda 9 avril 2019 à 10:52:44

Je pense aussi que ça vient de la. Car même si tu sélectionnes une cellule, a aucun moment tu passes une valeur à ip. Et normalement  c'est juste un.

Pour avoir l'indexPath de la cellule selectionnée, Il faut faudrait quelque chose du genre:

  guard let ip = tableview.indexPathForSelectedRow as! IndexPath else { return }

ensuite, dans ton segue je ne comprends pas pourquoi le sender c'est indexPath. indexPath n'est pas un objet, mais une liste bidimentionnelle

-
Edité par idembele 18 avril 2019 à 10:40:29

  • Partager sur Facebook
  • Partager sur Twitter