2012-02-17 20 views
37

Estoy intentando cargar algunos archivos .applescript en mi proyecto.pathForResource devuelve nulo

copiarlos en el directorio "Archivos de apoyo" de esta manera:

enter image description here

y trataron de acceder a ellos:

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

pathForResource siempre devuelve un valor nulo.

Ambos archivos se importan correctamente en xcode. La membresía objetivo es mi aplicación. Las soluciones de preguntas similares realmente no ayudaron

¿Qué estoy haciendo mal?

Respuesta

138

En el objetivo de Xcode "Build Phases" agregar el archivo en "Copiar Bundle Recursos""

+0

simple y exactamente lo que me faltaba. ¡Gracias! – dvcrn

+1

Arrastrar/soltar aún está roto en Xcode 4.5 :(- por ejemplo, arrastrando los propios sombreadores OpenGL de Apple desde Finder a un proyecto no se pudieron agregar a la fase Copy Bundle Resources (¿por qué? ¡Seguramente Apple no lo haga difícil de implementar!). Suspiro. – Adam

+1

Gracias Zaph. Has guardado el día que me queda. –

0

¿Su imagen suponer que ese archivo en alguna carpeta

Trate pathForResource:ofType:inDirectory: método en este caso:.?

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

Además de lo que dijo Zaph, asegúrese de que no se está ejecutando en el modo de 'liberación'.

Hubo un tiempo en el que para tiene que cambiar esa configuración, y los símbolos fueron eliminados, lo que hace que NSBundle sea incapaz de resolver la ruta.

1

Gran respuesta de Zaph anterior, pero me di cuenta cuando lo estaba haciendo hay una manera más rápida, al menos en Xcode 6.1.

si haces un solo clic en el archivo (por ejemplo, test.applescript) y tienes el menú derecho de Xcode abierto, verás una sección llamada "Membresía objetivo". Asegúrese de que el objetivo correcto (como en el que está utilizando el script) esté seleccionado y hará el mismo trabajo que agregar el archivo en "Copiar recursos del paquete"

Además, no del todo relevante, pero en caso de que estés cargando desde varios lugares diferentes, o si estás heredando esta clase. Realmente no debería usar

[NSBundle mainBundle];

en lugar de utilizar

[NSBundle bundleForClass:[self class]]; 

Eso significa que usted no tiene que preocuparse acerca de dónde se encuentra en la llamada al método que va a tomar el recurso de los elementos apropiados asociados al destino que se está ejecutando. Ideal para hacer librerías y llamadas reutilizables;)

4

Para todos aquellos que todavía obtienen una ruta de acceso nula y el archivo se agrega en "Copiar recursos de paquete", simplemente elimine el archivo de Copiar recursos de paquete y vuelva a agregarlo.

+0

exactamente lo que necesito ... – code4j

Cuestiones relacionadas