Ссылка на файл пера в подпапке пакета приложений Cocoa, скомпилированного в Xcode.

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

Вопрос

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

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

Это было полезно?

Решение

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

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

Все пойдет намного проще, если вы откажетесь от подкаталогов в Resources.

Другие советы

Другой вариант — создать «Сценарий запуска», который будет выполняться в конце ваших «Фаз сборки», который мог бы копировать ваши файлы *.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} это путь к вашему «основному пакету».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top