Trate de no reír ni llorar, estoy volviendo a la codificación después de 20 años ...
He pasado más de 4 horas buscando referencias y probando fragmentos de código para que Bundle.main.path abra mi archivo de texto para poder leer los datos de mi aplicación (mi siguiente paso es analizarlos adecuadamente).
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.")
}
El resultado es: "newTest.txt not found". independientemente de cómo intente arrastrar y soltar el archivo en el proyecto, crear el archivo dentro de Xcode o usar el elemento de menú Archivo -> Agregar archivos a ...
Respuestas:
El problema es que el archivo no se está copiando en su paquete de aplicaciones. Arreglarlo:
fuente
Verifique dos veces
Options
en eladd files
menú cuando agregue el archivo. El objetivo enAdd to targets
debe estar marcado para agregarlo al paquete:En caso de que esté realmente en otro paquete (prueba, por ejemplo), use:
guard let fileURL = Bundle(for: type(of: self)).url(forResource: fileName withExtension:"txt") else { fatalError("File not found") }
fuente
Haga clic en su archivo en su panel de navegación y abra el Panel derecho / Inspector de propiedades.
Asegúrese de agregar a la membresía de destino
fuente
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) }
Salida:
Hello Hems Good Morning I m here for you dude. Happy Coding.
fuente
Ah, entonces me encontré lidiando exactamente con el mismo problema que el OP.
El problema es que las soluciones dadas aquí y aquí no funcionan cuando el código se está ejecutando en un patio de juegos, ya que el
Options
menú deadd files
parece diferente porque no muestra elAdd to targets
campo:Cuando esté dentro de un
.playground
archivo, presione elHide or show the Navigator
botón en la parte superior derecha de la ventana de Xcode (impresión visual) ->Luego, una vez que el navegador se abre en el lado izquierdo de la ventana de Xcode, simplemente arrastre y suelte su archivo en el
Resources
directorio de su área de juegos.Si su configuración se parece a la siguiente, debería estar bien:
fuente
Mismo problema, situación y solución ligeramente diferente. Estoy siguiendo un tutorial que decía usar el siguiente código:
// 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") } } }
Tuve el mismo problema que otros, pero ninguna de las soluciones solucionó el problema. Después de experimentar, todo lo que hice fue eliminar Sound de la ruta en la siguiente llamada y todo funcionó:
Bundle.main.path(forResource: "BackgroundMusic.m4a", ofType: nil)
Parece que el tutorial fue un error al decirme que incluyera Sound en la ruta.
fuente
Agregué
file.txt
a mi proyecto y se agregó automáticamente alCopy Bundle Files
de mi proyecto. Para mí, tuve que quitar la extensión delforResource
y funcionó.let path = Bundle.main.path(forResource: "file", ofType: "txt") // not forResource: "file.txt"
fuente
Esto fue útil para mí: xcode: copie una estructura de carpetas en mi paquete de aplicaciones
Marque la opción "crear referencias de carpeta" cuando cree activos en carpetas anidadas.
Luego busque la ruta al archivo de esta manera:
let path = Bundle(for: type(of : self)).path(forResource: "some_folder_a/some_folder_b/response.json", ofType: nil)
fuente
Es una locura cuánto tiempo puede costar un problema tan simple.
Algunas respuestas aquí me ayudaron, pero siempre lo intenté:
Bundle.main.url(forResource: selectedTitle, withExtension: "mp3")
Por alguna razón, eso no funciona, pero obtener la ruta y traducirla a una URL después funciona:
let path = Bundle.main.path(forResource: selectedTitle, ofType: "mp3") let url = URL(fileURLWithPath: path!)
fuente
Creo que no quieres el
inDirectory:
método. Prueba esto en su lugar:if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt") {
fuente