Hacer referencia a un archivo semilla en una subcarpeta de un paquete de aplicación Cocoa Xcode compilado

StackOverflow https://stackoverflow.com/questions/906360

Pregunta

Si tengo un directorio en mi proyecto de Xcode (no un grupo), que se añade a la meta principal, y compilarlo, ¿cómo puedo encargar a un NSViewController a initWithNibName:bundle: un archivo semilla dentro de ese directorio?

He intentado [viewController initWithNibName:@"FolderName/NibName" bundle:nil], pero que no funciona. Tampoco lo hace sin el nombre de la carpeta, ni establecer el parámetro de paquete [NSBundle mainBundle]. Incluso he intentado fijar el haz de [NSBundle bundleWithPath:pathToFolderName] en vano.

¿Fue útil?

Solución

es el mejor de no usar carpetas como este. Muchas de las comodidades del cacao como - [NSImage imageNamed:], o el método de controlador de vista init esperan encontrar un archivo en la carpeta de recursos del paquete

.

Si realmente te gustaría mantener una carpeta de archivos NIB todos modos, se puede, pero usted no será capaz de utilizar los métodos de conveniencia. Puede anular - [NSViewController loadView] método de su controlador de vista de invocar - [NSBundle loadNibFile: externalNameTable: withZone:]. Se podría pasar la ruta del archivo de SEMILLA, una tabla con el nombre NSNibOwner establece en el controlador de vista, y una zona nula. También tendrá que cuidar de la liberación de los objetos de nivel superior a partir del archivo de NIB.

Las cosas irán mucho más suave si abandona los subdirectorios en Recursos.

Otros consejos

Otra opción sería la creación de un 'Ejecutar script' para ser ejecutado al final de sus 'construir' Fases que podría copiar sus archivos * .xib desde el directorio no grupal en el haz principal. Usted no sólo tendrá que copiar los archivos xib pero tendrá que compilarlos en archivos * .nib utilizando el comando ibtool. A continuación se muestra un ejemplo de mi script que estoy usando:

# For some reason the tilde is causing problems with find
# so I am replacing the tilde with /Users/whoami
user=`whoami`

# We will find all non-nib files in this directory and copy them into the main bundle
find -L ${LW_ISHARE_PLATFORM_SRC/\~/\/Users\/$user}/lw-ishare-platform-nibs -type f -not -name ".*" -not -name "*.xib" | xargs -t -I {} cp {} ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/

export IBC_MINIMUM_COMPATIBILITY_VERSION=${IPHONEOS_DEPLOYMENT_TARGET}
#setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
export XCODE_DEVELOPER_USR_PATH="/Developer/usr/bin/"

# Now compile all xib files into nib files
for each in `find -L ${LW_ISHARE_PLATFORM_SRC/\~/\/Users\/$user}/lw-ishare-platform-nibs -type f -name "*.xib"`
do
prefix=`basename "${each}" .xib`
${XCODE_DEVELOPER_USR_PATH}/ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/${prefix}.nib ${each} --sdk ${SDKROOT}
done

exit 0

$LW_ISHARE_PLATFORM_SRC es una variable global de XCode para mí y estoy poniendo todo mi * .xib y recursos relacionados en el directorio $LW_ISHARE_PLATFORM_SRC/lw-ishare-platform-nibs.

${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH} es la ruta a su "paquete principal".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top