2

如果我的 Xcode 项目(不是组)中有一个目录,它被添加到主目标并编译它,我如何指示 NSViewController 到initWithNibName:bundle:该目录内的 nib 文件?

我试过[viewController initWithNibName:@"FolderName/NibName" bundle:nil]了,但这不起作用。没有文件夹名称,也没有将 bundle 参数设置为[NSBundle mainBundle]. 我什至尝试将捆绑包设置[NSBundle bundleWithPath:pathToFolderName]为无济于事。

4

2 回答 2

3

你最好不要使用这样的文件夹。许多 Cocoa 便利,如 -[NSImage imageNamed:] 或视图控制器 init 方法都希望在包的 Resources 文件夹中找到一个文件。

如果您真的想保留一个包含 NIB 文件的文件夹,您可以,但您将无法使用便捷方法。您可以覆盖视图控制器的 -[NSViewController loadView] 方法来调用 -[NSBundle loadNibFile:externalNameTable:withZone:]。您将传递 NIB 文件的路径、将 NSNibOwner 设置为视图控制器的名称表和 NULL 区域。您还需要注意从 NIB 文件中释放顶级对象。

如果您放弃资源中的子目录,事情会顺利得多。

于 2009-05-29T09:59:11.500 回答
1

另一种选择是创建一个“运行脚本”以在“构建阶段”结束时执行,该脚本可以将您的 *.xib 文件从非组目录复制到主包中。您不仅需要复制 xib 文件,还需要使用ibtool命令将它们编译成 *.nib 文件。下面是我正在使用的脚本示例:

# 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}是您的“主捆绑包”的路径。

于 2012-03-06T20:29:14.317 回答