الرجوع إلى ملف NIB في مجلد فرعي لحزمة تطبيق Cocoa Comboded Compoded

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

سؤال

إذا كان لدي دليل في مشروع Xcode الخاص بي (وليس مجموعة)، والذي يضاف إلى الهدف الرئيسي، وتجميعه، كيف يمكنني توجيه إلى NSViewController إلى initWithNibName:bundle: ملف NIB داخل هذا الدليل؟

لقد حاولت [viewController initWithNibName:@"FolderName/NibName" bundle:nil], ، ولكن هذا لا يعمل. لا يفعل بدون اسم المجلد، ولا إعداد معلمة الحزمة ل [NSBundle mainBundle]. وبعد لقد حاولت حتى وضع حزمة ل [NSBundle bundleWithPath:pathToFolderName] ولكن دون جدوى.

هل كانت مفيدة؟

المحلول

أفضل حال كنت لا تستخدم مجلدات مثل هذا. العديد من وسائل الرحلات الكاكاو مثل - [NSIMAIGE IMAMEAMAMED:]، أو طريقة عرض وحدة تحكم INT تتوقع العثور على ملف في مجلد الموارد للحزمة.

إذا كنت ترغب حقا في الاحتفاظ بمجلد من ملفات NIB على أي حال، فيمكنك، لكنك لن تتمكن من استخدام أساليب الراحة. يمكنك تجاوز - [NSViewController LoadView] طريقة لوحدة التحكم الخاصة بك لاستدعاءها - [NSBundle loadnibfile: usdlamnametable: withzone:]. يمكنك تمرير المسار إلى ملف NIB، وهو جدول اسم مع تعيين NSNIBOWNER إلى وحدة تحكم العرض، ومنطقة خالية. ستحتاج أيضا إلى العناية بإطلاق كائنات المستوى الأعلى من ملف NIB.

سوف تذهب الأمور أكثر سلاسة إذا تخلت عن الدلائل الفرعية في الموارد.

نصائح أخرى

سيكون هناك خيار آخر هو إنشاء "تشغيل برنامج نصي" ليتم تنفيذه في نهاية "مراحل البناء" التي يمكن أن نسخ ملفاتك * .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 بالنسبة لي وأنا أضع كل ما عندي من المورد والموارد ذات الصلة في $LW_ISHARE_PLATFORM_SRC/lw-ishare-platform-nibs الدليل.

${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH} هو الطريق إلى "الحزمة الرئيسية" الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top