2012-02-17 16 views
37

Sto provando a caricare alcuni file .applescript nel mio progetto.pathForResource restituisce null

li copiato nella directory "File di supporto" come questo:

enter image description here

e cercarono di accedervi:

NSBundle *bundle = [NSBundle mainBundle]; 
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript"]); 

pathForResource restituisce sempre null.

Entrambi i file sono importati correttamente in xcode. L'abbonamento target è la mia app. Le soluzioni di domande simili non sono state di grande aiuto

Cosa sto facendo di sbagliato?

risposta

138

Nel target Xcode "Build Fasi" aggiungere il file con "Copia Bundle Risorse""

+0

semplice ed esattamente quello che mi mancava. Grazie! – dvcrn

+1

Il trascinamento/rilascio è ancora interrotto in Xcode 4.5 :(- ad esempio trascinando gli shader OpenGL di Apple dal Finder a un progetto non è stato possibile aggiungerli alla fase Copy Bundle Resources (perché? Sicuramente questo non è difficile da implementare!). Sigh. – Adam

+1

Grazie Zaph. Hai salvato il mio giorno rimanente –

0

La vostra immagine supporre che quel file in qualche cartella

Prova pathForResource:ofType:inDirectory: metodo in questo caso:.?

NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript" inDirectory:@"folder/Supporting Files"); 
0

in aggiunta a quanto detto Zaph, assicurarsi che non sia in esecuzione in modalità 'uscita'.

C'è stato un tempo in cui ho per devo cambiare quell'impostazione e i simboli sono stati rimossi, rendendo NSBundle incapace di risolvere il percorso.

1

Ottima risposta da Zaph sopra, ma ho notato che quando lo stavo facendo c'è un modo più rapido, almeno in Xcode 6.1.

se si fa clic sul file (ad esempio test.applescript) e si apre il menu di Xcode, verrà visualizzata una sezione denominata "Appartenenza di destinazione". Assicurati che l'obiettivo giusto (come quello con cui stai usando lo script) sia selezionato e svolgerà lo stesso lavoro dell'aggiunta del file in "Copia risorse pacchetto"

Inoltre, non del tutto pertinente, ma in caso si sta caricando da diversi luoghi, o si eredita questa classe. Non si dovrebbe usare veramente

[NSBundle mainBundle];

invece utilizzare

[NSBundle bundleForClass:[self class]]; 

Ciò significa che non devi preoccuparti di dove tu sia la chiamata al metodo ci vorrà la risorsa dalle voci appropriate associati con il target si sta eseguendo. Ottimo per creare librerie e chiamate riutilizzabili;)

4

Per tutti coloro che stanno ancora ottenendo un percorso nullo e il file è stato aggiunto in "Copia risorse pacchetto" è sufficiente rimuovere il file da Copia pacchetto risorse e aggiungere nuovamente.

+0

esattamente quello che mi serve ... – code4j

Problemi correlati