2

initWithNibName:bundle:Xcode プロジェクト (グループではない) に、メイン ターゲットに追加されたディレクトリがあり、それをコンパイルする場合、そのディレクトリ内の nib ファイルにNSViewController を指示するにはどうすればよいですか?

試してみまし[viewController initWithNibName:@"FolderName/NibName" bundle:nil]たが、うまくいきません。フォルダー名がなくても、バンドルパラメーターを に設定しても同じ[NSBundle mainBundle]です。[NSBundle bundleWithPath:pathToFolderName]バンドルを無駄に設定しようとさえしました。

4

2 に答える 2

3

このようなフォルダは使用しない方がよいでしょう。-[NSImage imageNamed:] などの多くの Cocoa の便利な機能や、ビュー コントローラーの init メソッドは、バンドルの Resources フォルダーでファイルを見つけることを想定しています。

とにかくNIBファイルのフォルダーを保持したい場合は、それは可能ですが、便利な方法を使用することはできません. ビュー コントローラの -[NSViewController loadView] メソッドをオーバーライドして、-[NSBundle loadNibFile:externalNameTable:withZone:] を呼び出すことができます。NIB ファイルへのパス、NSNibOwner がビュー コントローラーに設定された名前テーブル、および NULL ゾーンを渡します。また、NIB ファイルから最上位のオブジェクトを解放する必要があります。

Resources のサブディレクトリを放棄すると、物事はよりスムーズに進みます。

于 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 に答える