2011-10-15 21 views
21

Quiero agregar algunos archivos estáticos (imagen, binario, etc.) a mi aplicación. Los coloqué debajo de una carpeta llamada Resources y los he agregado a mi proyecto de XCode.Cómo acceder a los archivos locales dentro del proyecto

A continuación, tengo esos archivos agregados al Copy Bundle Resources en la pestaña Build Phases en la configuración del proyecto.

Sin embargo, no puedo referirme a ellos de la manera correcta.

Por ejemplo, la lectura de un archivo binario:

NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:@"data.bin"]; 
if(![is hasBytesAvailable]) NSLog(@"wrong"); 

Esto siempre falla & impresiones wrong

He intentado un enfoque similar con NSData initWithContentsOfFile: pero esto ni siquiera ejecutar. Otro intento fue usar [NSBundle mainBundle] pero esto tampoco se ejecutó por completo.

Soy nuevo en iOS por favor ayuda, puedo acceder a mis archivos locales! Cualquier ayuda sería apreciada.

Gracias,

+0

¿Es correcto el caso? iOS distingue entre mayúsculas y minúsculas, por lo que 'Data.BIN' y' data.bin' son dos archivos diferentes. – DarkDust

+0

en minúsculas :( – chizzle

Respuesta

28

Debe asegurarse de que está accediendo al archivo en el lugar correcto. Xcode coloca sus archivos de recursos en el "paquete de aplicaciones" de la aplicación en el directorio Resources. Hay muchas maneras de sacarlos.

Una forma común es conseguir que el nombre de ruta de un archivo en su paquete:

NSBundle *mainBundle = [NSBundle mainBundle]; 
NSString *myFile = [mainBundle pathForResource: @"data" ofType: @"bin"]; 

Si tiene otros archivos en lugares no estándar en su conjunto, hay variaciones a pathForResource que deje que su especifique una nombre del directorio.

Si quieres ver la ubicación real en su disco duro que el simulador está utilizando para que pueda inspeccionarlo, se puede decir:

NSLog(@"Main bundle path: %@", mainBundle); 
NSLog(@"myFile path: %@", myFile); 

búsqueda de la "Guía de programación del paquete" en el Xcode biblioteca de documentación para comenzar. :-)

+0

Si obtiene errores usando el código anterior (como obtener nada para myFile) encuentre su paquete de aplicaciones en el directorio de compilación de Xcode, haga clic derecho (para ver su contenido) y vea si Xcode ** en realidad puso los "datos" .bin "archivo allí. :-) –

+0

de hecho me estaba devolviendo nada para' pathForResource' Suprimí todos mis recursos y los volví a agregar desde cero. ¿Cuál es la mejor manera de agregar paquetes? ¿hago clic derecho en el proyecto y hago 'Agregar archivos a ?' – chizzle

+0

Debería poder usar el botón" + "en la sección" Copiar recursos de paquete "de las configuraciones de Crear fases para su destino. Nuevamente, si quiere ver qué hace Xcode detrás de escena, use el Buscador para navegar a '~/Library/Developer/Xcode/DerrivedData/{letras minúsculas aleatorias} nombre}/Build/Products/Debug-iphonesimulator' y mire dentro del archivo ".app". Ese es su paquete, y debería tener los archivos que solicitó a Xcode para que los copie. –

1

Uso NSBundle clase para eso. Por ejemplo:

NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"bin"]; 
NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:path]; 
... 
+1

Obtengo *** Aplicación de terminación debido a la excepción no detectada 'NSInvalidArgumentException', razón: '*** - [NSURL initFileURLWithPath:]: parámetro de cadena nula' *** Pila de la primera invocación: – chizzle

0

De hecho, la llamada [está abierta] es necesaria aunque "initialiseWithFileAtPath". Creo que la inicialización abriría automáticamente el archivo, pero no es así.

Cuestiones relacionadas