Versuchen Sie nicht zu lachen oder zu weinen - ich bin erst nach 20 Jahren wieder im Programmieren ...
Ich habe mehr als 4 Stunden damit verbracht, nach Referenzen zu suchen und Codeausschnitte zu versuchen, um Bundle.main.path zum Öffnen meiner Textdatei zu öffnen, damit ich Daten für meine App einlesen kann (mein nächster Schritt besteht darin, sie entsprechend zu analysieren).
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.")
}
Das Ergebnis ist: "newTest.txt wurde nicht gefunden." Unabhängig davon, wie ich versuche, die Datei per Drag & Drop in das Projekt zu ziehen, die Datei in Xcode zu erstellen oder den Menüpunkt Datei -> Dateien hinzufügen zu ... zu verwenden.
Das Problem ist, dass die Datei nicht in Ihr App-Paket kopiert wird. Etwas reparieren:
Überprüfen Sie beim Hinzufügen der Datei die Variable Options
im Menü add files
. Das Ziel in Add to targets
muss angekreuzt sein, um es dem Bundle hinzuzufügen:
Falls Sie sich tatsächlich in einem anderen Bundle befinden (zum Beispiel test), verwenden Sie:
guard let fileURL = Bundle(for: type(of: self)).url(forResource: fileName withExtension:"txt") else {
fatalError("File not found")
}
Klicken Sie im Navigationsbereich auf Ihre Datei und öffnen Sie den rechten Bereich/Eigenschafteninspektor.
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)
}
Ausgabe :
Hello Hems
Good Morning
I m here for you dude.
Happy Coding.
Ich habe file.txt
zu meinem Projekt hinzugefügt und es wurde automatisch zum Copy Bundle Files
meines Projekts hinzugefügt. Für mich musste ich die Erweiterung aus der forResource
entfernen und es funktionierte.
let path = Bundle.main.path(forResource: "file", ofType: "txt") // not forResource: "file.txt"
Ah, ich habe mich gerade mit dem gleichen Problem befasst wie das OP.
Das Problem ist, dass die angegebenen Lösungen here und here nicht funktionieren, wenn der Code auf einem Spielplatz ausgeführt wird, da das Options
-Menü von add files
anders aussieht, da das Feld Add to targets
nicht angezeigt wird:
Drücken Sie in einer .playground
-Datei stattdessen die Hide or show the Navigator
-Schaltfläche oben rechts in Ihrem Xcode-Fenster (visueller Eindruck) ->
Sobald der Navigator auf der linken Seite des Xcode-Fensters aufgeklappt ist, ziehen Sie Ihre Datei einfach in das Verzeichnis Resources
Ihres Spielplatzes.
Wenn Ihr Setup ungefähr wie folgt aussieht, sollten Sie in Ordnung sein:
Gleiches Problem, etwas andere Situation & Lösung. Ich folge einem Tutorial, das folgenden Code verwenden soll:
// 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") }
}
}
Ich hatte das gleiche Problem wie andere, aber keine der Lösungen löste das Problem. Nachdem ich experimentiert hatte, war alles was ich getan hatte, Sound aus dem Pfad in dem folgenden Aufruf zu entfernen und alles funktionierte:
Bundle.main.path(forResource: "BackgroundMusic.m4a", ofType: nil)
Es scheint, dass das Tutorial falsch war, als ich sagte, Sound in den Pfad aufzunehmen.
Dies war hilfreich für mich: xcode - eine Ordnerstruktur in mein App-Bundle kopieren
Markieren Sie die Option "Ordnerreferenzen erstellen", wenn Sie Assets in verschachtelten Ordnern erstellen.
Dann finden Sie den Pfad zur Datei wie folgt:
let path = Bundle(for: type(of : self)).path(forResource: "some_folder_a/some_folder_b/response.json", ofType: nil)
Ich denke, Sie wollen die inDirectory:
-Methode nicht. Versuchen Sie es stattdessen:
if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt") {