Mon application plante dés le lancement

yolo0123

Membre junior
16 Septembre 2018
12
0
60
Bonjour,

J'ai développé une petit application en swift pour apprendre du vocabulaire dans une langue et pour apprendre à coder en swift.

Quand je lance mon application, on arrive sur la première vue où il récupère les chemins des fichiers contenant le vocabulaire puis affiche le noms des fichiers dans une table view.

Mes fichiers de vocabulaire, je l'ai ai mis dans mon application avec CopyTrans Apps.

L'arbre ressemble à cela:
Bloc de code:
- Vocabulaire
-- Japonais
--- voc1.txt
--- voc2.txt
-- Anglais
--- voc1.txt
--- voc2.txt
Dans la table view

Au début quand je lance mon application sur mon ipad tout fonctionne parfaitement mais après l'avoir lancé plusieurs fois il crash dés le lancement, il n'arrive même pas à la première vue. J'endéduis donc qu'il y a un problème dans le code de la première vue.

(Pour coder en swift j'ai mis en place une VM c'était il y a un an puis j'ai eu un problème d'ordi et je n'avais plus la foi pour tout réinstaller. Je n'ai plus vraiment la tête dans le code ^^.)

Je mets le code de la première vue mais si vous voulez je peux mettre toute l'application.

Swift:
import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

   
    @IBOutlet weak var tableView: UITableView!{
        didSet {
            tableView.dataSource = self
            tableView.delegate = self
        }
    }
   
    // Dans la table view on aura une section réprésentant le nom du dossier (la langue) et les items seront les fichiers contenu dans ce dossier (les chemins fichiers de vocabulaire). On affichera uniquement le nom du fichier dans la table view.
    struct Cellules {
        var sections: String!
        var items: [URL]!
    }
   
    var pathFiles = [URL]()
   
    var objectsArray = [Cellules]()
   
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        // Dans le dossier de mon application je récupère dans le dossier Vocabulaire tous les noms de sous dossiers et les chemins des fichiers
       
        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 = [URL]()
                let files = try FileManager.default.contentsOfDirectory(at: directoryContents[f], includingPropertiesForKeys: nil, options:[])
                for i in 0..<files.count { nameFiles.append(files[i]) }
                objectsArray.append(Cellules(sections: directoryContents[f].lastPathComponent, items:nameFiles))
            }
         
        } 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].lastPathComponent
        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)
    }
   
    // On envoie le chemin du fichier séléctionné dans la deuxième vue
    // pour en extraire le vocabulaire.
    override func prepare(for segue: UIStoryboardSegue, sender: Any?){
        let svc = segue.destination as! SecondViewController
        let ip = sender as! IndexPath
        svc.pathFile = objectsArray[ip.section].items[ip.row].path
        //print("s: " + String(ip.section) + " - " + "r: " + String(ip.row) )
       
    }

}
 
Dernière édition:

Larme

Vétéran
Club MacG
11 Décembre 2007
6 491
396
Paris
Lance-la avec XCode. As-tu un message d'erreur dans la console d'XCode ?

Sinon, si tu l'as installée il y a quelques temps, elle a un temps de validité. Il faut la remettre avec XCode/Certificats, etc.