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:
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.
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: