2011-08-10 15 views
5

Tengo un problema realmente extraño con la aplicación para iPad que estoy escribiendo. Al inicio, quiero copiar una carpeta que contiene algunas otras carpetas (que están vacías) desde el paquete de la aplicación al directorio de Documentos. La carpeta que se va a copiar, llamada 'flds' (todo en minúsculas), se agregó al proyecto Xcode 4 usando 'Crear referencias de carpeta para cualquier carpeta agregada', y he comprobado que en realidad es parte del archivo .app después de la compilación. (Y que no existe ya al intentar copiar.)No se encontró la carpeta NSBundle en el dispositivo, pero funciona en el simulador

He intentado llegar a la carpeta '' flds utilizando una de estas llamadas (todos ellos trabajan):

[[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"flds"] 
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"flds"] 
[[NSBundle mainBundle] pathForResource:@"flds" ofType:@""] 

Entonces copiar utilizando el método copyItemAtPath:toPath:error: de NSFileManager (o el equivalente de URL cuando se usa URL en lugar de cadena de ruta de acceso).

Todas estas estrategias funcionan perfectamente en el iPad Simulator y en el dispositivo iPad, con la siguiente excepción: Cuando construya (con éxito) para distribución Ad Hoc, arrastre el .app y la .mobileprovision a iTunes, sincronícelos y luego ejecuta la aplicación en el dispositivo, ¡el sistema ya no piensa que existe la carpeta 'flds'! He estado tratando de examinar esto durante muchas horas, sin suerte. De nuevo, estoy completamente seguro de que funciona tanto en el simulador como en el dispositivo que se ejecuta desde Xcode, pero no cuando se sincroniza a través de iTunes.

Ideas?

he descubierto que la siguiente llamada se pone la ruta de la carpeta con éxito también después de la sincronización de la aplicación de iPad a través de iTunes:

[[NSBundle mainBundle] pathForResource:@"flds" ofType:nil inDirectory:nil] 

Sin embargo, cuando se utiliza esta vía para copiar la carpeta a su nueva ubicación en el directorio de documentos , sólo la propia carpeta y el archivo .txt en ella (lo que puse ahí como una prueba, no se supone realmente estar allí) se copia, y no las subcarpetas vacías 6-7. Nuevamente, se muestra el mismo patrón: Funciona como se esperaba tanto en el simulador como en el dispositivo ejecutado desde Xcode (la carpeta 'flds' con 'test.txt' y las subcarpetas vacías se copian con éxito), pero no cuando se sincroniza a través de iTunes (solo la carpeta 'flds' con 'test.txt' se copian, no subcarpetas). ¿Este es realmente el comportamiento previsto de copyItemAtPath:toPath:error:? ¿Y por qué se comportaría de manera diferente después de la sincronización a través de iTunes?

+0

No estoy seguro de si ha intentado esto, pero ha comprobado si existe la carpeta flds en el paquete de la versión final (el .app que arrastra a iTunes) haciendo clic con el botón derecho en la aplicación y seleccionando Mostrar paquete ¿Contenido? Debería poder localizar los archivos y las carpetas a los que está intentando acceder mediante el buscador. – Mark

+0

Lo he intentado. La carpeta definitivamente está ahí. También traté de poner un archivo .txt en una de las subcarpetas de 'flds' y acceder a él a través de pathForResource: ofType :, y eso realmente funciona. Obtener la carpeta en sí no. – hsdev

+0

Compruebe si está utilizando un archivo que no está en el dispositivo. Tal vez trataste de usar un archivo que está guardado en tu computadora. Si no está seguro, intente abrir su proyecto desde otra computadora y vea si funciona. – Sagiftw

Respuesta

0

Al final me di cuenta de que copyItemAtPath:toPath:error: no copiaba las carpetas vacías, aunque creo que se supone que debe hacerlo. Y nuevamente, este comportamiento solo ocurrió después de sincronizar la aplicación con el iPad a través de iTunes (cuando se ejecutaba desde Xcode copiaba carpetas vacías). Mi solución por el momento es simplemente poner un archivo de texto falso en cada subcarpeta, para que ya no estén vacíos.

Cuestiones relacionadas