2009-05-25 67 views
2

如果我的Xcode項目中有一個目錄(不是Group),它被添加到主目標並編譯它,如何指示一個NSViewController到initWithNibName:bundle:該目錄內的一個nib文件?我試過[viewController initWithNibName:@"FolderName/NibName" bundle:nil],但那不起作用。沒有文件夾名稱,也沒有將捆綁參數設置爲[NSBundle mainBundle]。我甚至嘗試將這個包設置爲[NSBundle bundleWithPath:pathToFolderName]無濟於事。在Xcode的子文件夾中引用一個nib文件編譯Cocoa應用程序包

回答

3

你最好不要使用這樣的文件夾。許多可可便利,如 - [NSImage imageNamed:]或視圖控制器init方法希望在該資源包的Res​​ources文件夾中找到一個文件。

如果你確實想保留一個NIB文件的文件夾,你可以,但是你將無法使用便利的方法。你可以重寫你的視圖控制器的[NSViewController loadView]方法來調用 - [NSBundle loadNibFile:externalNameTable:withZone:]。您可以將路徑傳遞給NIB文件,將NSNibOwner設置爲視圖控制器的名稱表以及NULL區域。您還需要注意從NIB文件釋放頂級對象。

如果您放棄參考資源中的子目錄,事情會變得更加順暢。

1

另一種選擇是創建一個'運行腳本'在'Build Phases'結束時執行,它可以將* .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}是您的「主包」的路徑。

相關問題