Постарайтесь не смеяться и не плакать - я только возвращаюсь к программированию через 20 лет ...
Я провел более 4 часов, просматривая ссылки и пробуя фрагменты кода, чтобы получить Bundle.main.path для открытия моего текстового файла поэтому я могу читать данные для своего приложения (мой следующий шаг - правильно проанализировать их).
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.")
}
Результат: «newTest.txt не найден». независимо от того, как я пытаюсь перетащить файл в проект, создать файл внутри Xcode или использовать пункт меню File -> Add Files to ...
Ответы:
Проблема в том, что файл не копируется в ваш набор приложений. Починить это:
источник
Дважды проверьте
Options
вadd files
меню при добавлении файла.Add to targets
Чтобы добавить цель в пакет, необходимо отметить галочку:Если вы действительно находитесь в другом пакете (например, тест), используйте:
guard let fileURL = Bundle(for: type(of: self)).url(forResource: fileName withExtension:"txt") else { fatalError("File not found") }
источник
Щелкните файл на панели навигации и откройте правую панель / инспектор свойств.
Убедитесь, что вы добавили к целевому членству
источник
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) }
Вывод :
Hello Hems Good Morning I m here for you dude. Happy Coding.
источник
Ах, так что я столкнулся с той же проблемой, что и OP.
Проблема в том, что решения, представленные здесь и здесь , не работают, когда код выполняется на игровой площадке, поскольку
Options
менюadd files
выглядит иначе, поскольку в нем не отображаетсяAdd to targets
поле:Находясь внутри
.playground
файла, вместо этого нажмитеHide or show the Navigator
кнопку в правом верхнем углу окна Xcode (визуальное впечатление) ->Затем, когда навигатор откроется в левой части окна Xcode, просто перетащите файл в
Resources
каталог игровой площадки.Если ваша установка выглядит примерно так, все должно быть в порядке:
источник
Это было полезно для меня: xcode - скопируйте структуру папок в мой комплект приложений
Отметьте опцию «создавать ссылки на папки» при создании ресурсов во вложенных папках.
Затем найдите путь к файлу следующим образом:
let path = Bundle(for: type(of : self)).path(forResource: "some_folder_a/some_folder_b/response.json", ofType: nil)
источник
Безумно, сколько времени может стоить такая простая задача.
Некоторые ответы здесь помогли мне, но я всегда пробовал:
Bundle.main.url(forResource: selectedTitle, withExtension: "mp3")
По какой-то причине это не работает, но получение пути и его последующий перевод в URL-адрес работают:
let path = Bundle.main.path(forResource: selectedTitle, ofType: "mp3") let url = URL(fileURLWithPath: path!)
источник
Та же проблема, немного другая ситуация и решение. Я следую руководству, в котором говорится, что нужно использовать следующий код:
// 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") } } }
У меня была та же проблема, что и у других, но ни одно из решений не устранило проблему. После экспериментов все, что я сделал, это удалил звук из пути в следующем вызове, и все сработало:
Bundle.main.path(forResource: "BackgroundMusic.m4a", ofType: nil)
Казалось бы, руководство было ошибочным, когда мне было сказано включить звук в путь.
источник
Я добавил
file.txt
в свой проект, и он был автоматически добавлен вCopy Bundle Files
мой проект. Мне пришлось удалить расширение из файла,forResource
и это сработало.let path = Bundle.main.path(forResource: "file", ofType: "txt") // not forResource: "file.txt"
источник
Я думаю, тебе не нужен
inDirectory:
метод. Попробуйте вместо этого:if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt") {
источник