Ссылка на файл пера в подпапке скомпилированного пакета XCode приложения Какао - PullRequest
2 голосов
/ 25 мая 2009

Если у меня есть проект в моем проекте XCode (не группа), который добавляется к основной цели и компилируется, как я могу дать NSViewController команду initWithNibName:bundle: файл nib внутри этого каталога?

Я пробовал [viewController initWithNibName:@"FolderName/NibName" bundle:nil], но это не работает. Ни обходится без имени папки, ни установки параметра пакета в [NSBundle mainBundle]. Я даже пытался установить пакет на [NSBundle bundleWithPath:pathToFolderName] безрезультатно.

Ответы [ 2 ]

3 голосов
/ 29 мая 2009

Лучше не использовать такие папки. Многие удобства Cocoa, такие как - [NSImage imageNamed:] или метод init контроллера представления, ожидают найти файл в папке Resources пакета.

Если вы действительно хотите сохранить папку с файлами NIB, вы можете, но вы не сможете использовать удобные методы. Вы можете переопределить - [NSViewController loadView] метод вашего контроллера представления для вызова - [NSBundle loadNibFile: externalNameTable: withZone:]. Вы должны передать путь к файлу NIB, таблицу имен с NSNibOwner, установленным на контроллер представления, и зону NULL. Вам также нужно позаботиться о том, чтобы освободить объекты верхнего уровня из файла NIB.

Все станет намного лучше, если вы откажетесь от подкаталогов в Ресурсах.

1 голос
/ 07 марта 2012

Другой вариант - создать 'Run Script', который будет выполняться в конце ваших 'Build Phases', который мог бы скопировать ваши * .xib-файлы из не группового каталога в основной комплект. Вам нужно будет не только скопировать файлы xib, но и скомпилировать их в файлы * .nib с помощью команды ibtool. Ниже приведен пример моего сценария, который я использую:

# 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 - это глобальная переменная XCode для меня, и я помещаю весь свой * .xib и связанный ресурс в каталог $LW_ISHARE_PLATFORM_SRC/lw-ishare-platform-nibs.

${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH} - это путь к вашему «основному пакету».

...