Mon application plante dés le lancement

yolo0123

Membre confirmé
16 Septembre 2018
12
0
64
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:
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.
 
Rien a voir car justement je n’y connais rien mais j’aimerai savoir où est ce que tu apprends à faire ce projet en particulier ? Est ce que c’est des sorte de flash card que tu veux faire ? Car je trouve l’idée géniale de combiner l’apprentissage des langues et du code donc j’aimerai faire pareil (et du coup je surveille ton post si un jour j’ai le même problème que toi ^^)
 
Rien a voir car justement je n’y connais rien mais j’aimerai savoir où est ce que tu apprends à faire ce projet en particulier ? Est ce que c’est des sorte de flash card que tu veux faire ? Car je trouve l’idée géniale de combiner l’apprentissage des langues et du code donc j’aimerai faire pareil (et du coup je surveille ton post si un jour j’ai le même problème que toi ^^)
Bonjour,

Je ne sais pas si tu es toujours intéressé mais j'ai laissé tombé car j'ai perdu une parti du code et j'ai eu la flemme de recommencé ^^ mais si tu veux je peux te l'envoyer.

Pour faire ce projet je me suis inspiré d'une application obenkyo sous android (qui n'est pas disponible sous iOS), quand j'était à l'université j'avais un module en objectif-c et j'ai commencé a écrire en objectif-c puis je suis passé sous swift. Pour réaliser certaine tâche j'ai regardé des tutos sur youtube ^^.

Il n'y a pas vraiment de flash card, en fait il y a plusieurs modes:
  • un mode quizz en Fr : on a un mot en français et on doit trouver la réponse correspondante parmi quatre propositions
  • le même mode mais cette fois ci dans la langue l: on a un mot dans un mot l et on doit trouver la correspondance parmi quatre propositions en français.
  • un mode dessein: on a un mot l ou en français et on doit écrire la réponse attendu
  • un mode audio: on écoute un mot ou une phrase dans la langue l ou Fr et on doit trouver la bonne réponse ( comme le quizz)

Comme amélioration j'ai voulu rajouté une reconnaissance des mots écrit dans le mode dessein.
Et amélioré l'ajout de fichier permettant d'apprendre les mots.
 
Dernière édition: