Staraj się nie śmiać ani nie płakać - wracam do kodowania po 20 latach ...
Spędziłem ponad 4 godziny na przeglądaniu referencji i wypróbowywaniu fragmentów kodu, aby uzyskać Bundle.main.path do otwarcia mojego pliku tekstowego więc mogę wczytać dane dla mojej aplikacji (następnym krokiem jest ich odpowiednie przeanalizowanie).
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.")
}
Wynik jest następujący: „Nie znaleziono newTest.txt”. niezależnie od tego, jak próbuję przeciągnąć i upuścić plik do projektu, utworzyć plik w Xcode lub użyć pozycji menu Plik -> Dodaj pliki do ...
Odpowiedzi:
Problem polega na tym, że plik nie jest kopiowany do pakietu aplikacji. Naprawić to:
źródło
Sprawdź dwukrotnie
Options
wadd files
menu podczas dodawania pliku. Cel wAdd to targets
musi być zaznaczony, aby dodać go do pakietu:Jeśli faktycznie znajdujesz się w innym pakiecie (na przykład przetestuj), użyj:
guard let fileURL = Bundle(for: type(of: self)).url(forResource: fileName withExtension:"txt") else { fatalError("File not found") }
źródło
Kliknij plik w panelu nawigacyjnym i otwórz Prawy panel / Inspektor właściwości.
Upewnij się, że dodajesz do członkostwa docelowego
źródło
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) }
Wynik :
Hello Hems Good Morning I m here for you dude. Happy Coding.
źródło
Ach, więc właśnie znalazłem się do czynienia z dokładnie tym samym problemem co OP.
Problem w tym, że rozwiązania podane tutaj i tutaj nie działają, gdy kod jest wykonywany na placu zabaw, ponieważ
Options
menuadd files
wygląda inaczej, bo nie pokazujeAdd to targets
pola:Wewnątrz
.playground
pliku zamiast tego naciśnijHide or show the Navigator
przycisk w prawym górnym rogu okna Xcode (wrażenie wizualne) ->Następnie, gdy Nawigator zostanie otwarty po lewej stronie okna Xcode, po prostu przeciągnij i upuść plik do
Resources
katalogu swojego placu zabaw.Jeśli twoja konfiguracja wygląda mniej więcej tak, powinieneś być w porządku:
źródło
To było dla mnie pomocne: xcode - skopiuj strukturę folderów do mojego pakietu aplikacji
Zaznacz opcję „utwórz odniesienia do folderów” podczas tworzenia zasobów w zagnieżdżonych folderach.
Następnie znajdź ścieżkę do pliku w ten sposób:
let path = Bundle(for: type(of : self)).path(forResource: "some_folder_a/some_folder_b/response.json", ofType: nil)
źródło
To szalone, ile czasu może kosztować taki prosty problem.
Niektóre odpowiedzi mi pomogły, ale zawsze próbowałem:
Bundle.main.url(forResource: selectedTitle, withExtension: "mp3")
Z jakiegoś powodu to nie działa, ale uzyskanie ścieżki i późniejsze przetłumaczenie jej na adres URL działa:
let path = Bundle.main.path(forResource: selectedTitle, ofType: "mp3") let url = URL(fileURLWithPath: path!)
źródło
Ten sam problem, nieco inna sytuacja i rozwiązanie. Podążam za samouczkiem, który mówi, że używa następującego kodu:
// 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") } } }
Miałem ten sam problem, co inni, ale żadne z rozwiązań nie rozwiązało problemu. Po eksperymentowaniu wszystko, co zrobiłem, to usunięcie dźwięku ze ścieżki w następującym wywołaniu i wszystko działało:
Bundle.main.path(forResource: "BackgroundMusic.m4a", ofType: nil)
Wydawałoby się, że samouczek był w błędzie, mówiąc mi, żebym dołączył dźwięk do ścieżki.
źródło
Dodałem
file.txt
do mojego projektu i został on automatycznie dodany doCopy Bundle Files
mojego projektu. U mnie musiałem usunąć rozszerzenie zforResource
i zadziałało.let path = Bundle.main.path(forResource: "file", ofType: "txt") // not forResource: "file.txt"
źródło
Myślę, że nie chcesz tej
inDirectory:
metody. Spróbuj tego zamiast tego:if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt") {
źródło