2015-01-05 28 views
7

Lavorando a uno strumento della riga di comando, sto cercando di recuperare il percorso di un elenco di parole memorizzato in un file chiamato words.txt. Il file viene aggiunto al progetto, incluso nell'abbonamento al progetto del progetto, e selezionato per essere copiato durante la fase di creazione dei file di copia del target. All'interno Main.swift questo codice:pathForResource restituisce nil in Applicazione console Mac OS X - Swift

if let path = NSBundle.mainBundle().pathForResource("words", ofType: "txt") { 
    println("Path is \(path)") 
} else { 
    println("Could not find path") 
} 

stampe "Impossibile trovare il percorso". La funzione di classe mainBundle() è il pacchetto corretto da accedere? Qualche idea sul perché la funzione pathForResource ritorna nulla?

risposta

27

Per utilizzare i bundle con gli strumenti della riga di comando è necessario assicurarsi di aggiungere i file di risorse come parte della fase di creazione. Sembra che tu lo apprezzi, ma non l'hai eseguito correttamente. Quanto segue ha funzionato per me in un'app demo rapida:

  1. Aggiungi la risorsa al tuo progetto.

enter image description here

  1. Selezionare il file di progetto nella navigazione di progetto.

enter image description here

  1. Aggiungere una nuova fase di file copia.

enter image description here

  1. Per la fase aggiunto nel passaggio 3 , aggiungere il file da punto 1. A tale scopo, fai clic sul pulsante + (cerchiato) e quindi naviga sul file in questione.

enter image description here


Quando si genera il progetto, si dovrebbe ora essere in grado di accedere il percorso del file utilizzando NSBundle.

import Foundation 

let bundle = NSBundle.mainBundle() 
let path = bundle.pathForResource("numbers", ofType: "txt") 

if let p = path { 
    let string = NSString(contentsOfFile: p, 
     encoding: NSUTF8StringEncoding, 
     error: nil) 
    println(string) 
} else { 
    println("Could not find path") 
} 

// Output -> Optional(I am the numbers file.) 
+0

Hey suo straordinario grazie mille – ashokdy

3

Gli strumenti della riga di comando non utilizzano i bundle, sono solo un file eseguibile non elaborato e non sono compatibili con la fase di creazione dei file di copia o con la classe NSBundle.

È necessario memorizzare il file da qualche altra parte (ad esempio, ~/Library/Application Support).