Versuche nicht zu lachen oder zu weinen - ich komme erst nach 20 Jahren wieder zum Codieren ...
Ich habe mehr als 4 Stunden damit verbracht, Referenzen zu suchen und Codefragmente zu versuchen, um Bundle.main.path zum Öffnen meiner Textdatei zu bewegen So kann ich Daten für meine App einlesen (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 nicht gefunden." Unabhängig davon, wie ich versuche, die Datei per Drag & Drop in das Projekt zu ziehen, erstellen Sie die Datei in Xcode oder verwenden Sie den Menüpunkt Datei -> Dateien hinzufügen zu ...
Antworten:
Das Problem ist, dass die Datei nicht in Ihr App-Bundle kopiert wird. Etwas reparieren:
quelle
Überprüfen Sie das
Options
imadd files
Menü, wenn Sie die Datei hinzufügen. Das Ziel inAdd to targets
muss angekreuzt sein, um es dem Bundle hinzuzufügen:Wenn Sie sich tatsächlich in einem anderen Bundle befinden (z. B. Test), verwenden Sie:
guard let fileURL = Bundle(for: type(of: self)).url(forResource: fileName withExtension:"txt") else { fatalError("File not found") }
quelle
Klicken Sie in Ihrem Navigationsbereich auf Ihre Datei und öffnen Sie den rechten Bereich / Eigenschafteninspektor.
Stellen Sie sicher, dass Sie der Zielmitgliedschaft hinzufügen
quelle
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.
quelle
Ah, ich habe mich gerade mit genau dem gleichen Problem befasst wie das OP.
Das Problem ist, dass die hier und hier angegebenen Lösungen nicht funktionieren, wenn der Code auf einem Spielplatz ausgeführt wird, da das
Options
Menü vonadd files
anders aussieht , da es dasAdd to targets
Feld nicht anzeigt :Wenn Sie sich in einer
.playground
Datei befinden, drücken Sie stattdessen dieHide or show the Navigator
Schaltfläche oben rechts in Ihrem Xcode-Fenster (visueller Eindruck) ->Sobald sich der Navigator auf der linken Seite des Xcode-Fensters geöffnet hat, ziehen Sie Ihre Datei einfach per Drag & Drop in das
Resources
Verzeichnis Ihres Spielplatzes.Wenn Ihr Setup ungefähr so aussieht, sollten Sie in Ordnung sein:
quelle
Dies war hilfreich für mich: xcode - Kopieren Sie eine Ordnerstruktur in mein App-Bundle
Markieren Sie die Option "Ordnerreferenzen erstellen", wenn Sie Assets in verschachtelten Ordnern erstellen.
Suchen Sie dann 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)
quelle
Es ist verrückt, wie viel Zeit ein so einfaches Problem kosten kann.
Einige Antworten hier haben mir geholfen, aber ich habe es immer versucht:
Bundle.main.url(forResource: selectedTitle, withExtension: "mp3")
Aus irgendeinem Grund funktioniert das nicht, aber das Abrufen des Pfads und das anschließende Übersetzen in eine URL funktioniert:
let path = Bundle.main.path(forResource: selectedTitle, ofType: "mp3") let url = URL(fileURLWithPath: path!)
quelle
Gleiches Problem, etwas andere Situation und Lösung. Ich folge einem Tutorial, in dem der folgende Code verwendet wird:
// 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 hat das Problem behoben. Nach dem Experimentieren habe ich im folgenden Aufruf nur Sound aus dem Pfad entfernt und alles hat funktioniert:
Bundle.main.path(forResource: "BackgroundMusic.m4a", ofType: nil)
Es scheint, dass das Tutorial fehlerhaft war, als ich aufgefordert wurde, Sound in den Pfad aufzunehmen.
quelle
Ich
file.txt
habe meinem Projekt hinzugefügt und es wurde automatisch zu meinem Projekt hinzugefügtCopy Bundle Files
. Für mich musste ich die Erweiterung aus dem entfernenforResource
und es hat funktioniert.let path = Bundle.main.path(forResource: "file", ofType: "txt") // not forResource: "file.txt"
quelle
Ich denke, Sie wollen die
inDirectory:
Methode nicht. Versuchen Sie stattdessen Folgendes:if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt") {
quelle