Pergunta

Se eu tiver um diretório no meu projeto Xcode (não um Grupo), que é adicionado ao alvo principal, e compilá-lo, como faço para instruir um NSViewController para initWithNibName:bundle: um nib arquivo dentro desse diretório?

Eu tentei [viewController initWithNibName:@"FolderName/NibName" bundle:nil], mas que não funciona.Nem sem o nome da pasta, nem a definição do pacote de parâmetro para [NSBundle mainBundle].Eu até tentei definir o feixe de [NSBundle bundleWithPath:pathToFolderName] não adiantou.

Foi útil?

Solução

É melhor você não usar pastas como esta. Muitas conveniências de cacau como -[nsimage imageNamed:] ou o método init do controlador de exibição esperam encontrar um arquivo na pasta de recursos do pacote.

Se você realmente gostaria de manter uma pasta de arquivos NIB de qualquer maneira, você pode, mas não poderá usar os métodos de conveniência. Você pode substituir -[NSVIEWController loadView] Método do seu controlador de exibição para invocar -[NSbundle Loadnibfile: ExternalNineTable: WithZone:]. Você passaria o caminho para o arquivo NIB, uma tabela de nome com o NSNIBOWNER SET para o controlador de exibição e uma zona nula. Você também precisará cuidar dos objetos de nível superior do arquivo NIB.

As coisas ficarão muito mais suaves se você abandonar os sub -diretórios em recursos.

Outras dicas

Outra opção seria criar uma "Executar Script" para ser executado no final de seu "Construir" Fases " que pode copiar os seus *.arquivos xib de fora do grupo para o directório principal do pacote.Você não só precisa copiar os arquivos xib, mas você precisa compilá-los em *.nib de arquivos utilizando o ibtool de comando.Abaixo está um exemplo do meu script que estou 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 é um global XCode variável para mim e eu estou colocando todos os meus *.xib e recursos relacionados no $LW_ISHARE_PLATFORM_SRC/lw-ishare-platform-nibs diretório.

${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH} é o caminho para o seu "principal bundle".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top