Essayez de ne pas rire ni pleurer - je retourne à la programmation après 20 ans….
J'ai passé plus de 4 heures à rechercher des références et à essayer des extraits de code pour que Bundle.main.path ouvre mon fichier texte afin que je puisse lire les données de mon application (l'étape suivante consiste à l'analyser de manière appropriée).
if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt")
{
do
{
let contents = try String(contentsOfFile: filepath)
print(contents)
}
catch
{
print("Contents could not be loaded.")
}
}
else
{
print("newTest.txt not found.")
}
Le résultat est: "newTest.txt introuvable." indépendamment de la façon dont j'essaie de faire glisser le fichier dans le projet, créez le fichier dans Xcode ou utilisez l'élément de menu Fichier -> Ajouter des fichiers à ....
Le problème est que le fichier ne s'adapte pas à votre lot d'applications. Réparer:
Vérifiez deux fois la Options
dans le menu add files
lorsque vous ajoutez le fichier. La cible dans Add to targets
doit être cochée pour l'ajouter à l'ensemble:
Si vous êtes réellement dans un autre lot (test par exemple), utilisez:
guard let fileURL = Bundle(for: type(of: self)).url(forResource: fileName withExtension:"txt") else {
fatalError("File not found")
}
Cliquez sur votre fichier dans votre panneau de navigation et ouvrez l'inspecteur Panneau droit/Propriétés.
Swift 3.0
let fileNmae = "demo"
let path = Bundle.main.path(forResource: fileNmae, ofType: "txt")
do {
let content = try String(contentsOfFile:path!, encoding: String.Encoding.utf8)
print(content)
} catch {
print("nil")
}
Swift 2.0
do{
if let path = NSBundle.mainBundle().pathForResource("YOURTXTFILENAME", ofType: "txt"){
let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding)
let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
print(myStrings)
}
} catch let err as NSError {
//do sth with Error
print(err)
}
Sortie:
Hello Hems
Good Morning
I m here for you dude.
Happy Coding.
J'ai ajouté file.txt
à mon projet et il a été automatiquement ajouté au Copy Bundle Files
de mon projet. Pour moi, j'ai dû supprimer l'extension de la forResource
et cela a fonctionné.
let path = Bundle.main.path(forResource: "file", ofType: "txt") // not forResource: "file.txt"
Ah, alors je viens de me retrouver avec exactement le même problème que le PO.
Le problème est que les solutions données ici et ici ne fonctionnent pas lorsque le code est exécuté dans un terrain de jeu, car le menu Options
de add files
est différent car il ne présente pas le champ Add to targets
:
Lorsque vous vous trouvez dans un fichier .playground
, appuyez à la place sur le bouton Hide or show the Navigator
en haut à droite de la fenêtre Xcode (impression visuelle) -> .
Ensuite, une fois que le navigateur s’ouvre sur le côté gauche de la fenêtre Xcode, faites simplement glisser votre fichier dans le répertoire Resources
de votre terrain de jeu.
Si votre configuration ressemble à la suivante, tout devrait bien se passer:
Même problème, situation et solution légèrement différentes. Je suis un tutoriel qui dit d'utiliser le code suivant:
// Start the background music:
if let musicPath = Bundle.main.path(forResource:
"Sound/BackgroundMusic.m4a", ofType: nil) {
print("SHOULD HEAR MUSIC NOW")
let url = URL(fileURLWithPath: musicPath)
do {
musicPlayer = try AVAudioPlayer(contentsOf: url)
musicPlayer.numberOfLoops = -1
musicPlayer.prepareToPlay()
musicPlayer.play()
}
catch { print("Couldn't load music file") }
}
}
J'avais le même problème que d'autres, mais aucune des solutions ne l'a résolu. Après avoir expérimenté, tout ce que je fis fut de retirer Son du chemin de l'appel suivant et tout fonctionna:
Bundle.main.path(forResource: "BackgroundMusic.m4a", ofType: nil)
Il semblerait que le tutoriel était une erreur en me disant d'inclure Sound dans le chemin.
Cela m'a été utile: xcode - copier une structure de dossiers dans mon bundle d'applications
Cochez l'option "Créer des références de dossier" lorsque vous créez des actifs dans des dossiers imbriqués.
Puis trouvez le chemin vers le fichier comme ceci:
let path = Bundle(for: type(of : self)).path(forResource: "some_folder_a/some_folder_b/response.json", ofType: nil)
Je pense que vous ne voulez pas la méthode inDirectory:
. Essayez ceci à la place:
if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt") {