2012-05-07 15 views
7

आईओएस पर initWithNibName चालाक है: यह आईफोन के बजाए आईपैड के लिए स्वचालित रूप से अलग-अलग एनआईबी लोड करने जैसी चीजें करता है (हालांकि बहुत से लोग इसे नहीं जानते हैं - यह UIViewController.initWithNibName में दस्तावेज़ नहीं है!)।initWithNibName मिलान फ़ाइल नाम के नियम क्या हैं?

लेकिन यह और क्या कर सकता है? केवल एप्पल डॉक्स मैं इस के लिए पाया है कि व्याख्या करते हैं:

  1. यह देखने के लिए और के साथ फ़ाइलों को मिलेगा ~ iPad या ~ नाम के अंत पर iphone
  2. एप्पल है कि यह नियमों का पालन करती तात्पर्य

लेकिन वहाँ छवि से मेल खाते के लिए नियमों को करने के लिए कोई लिंक है, और मैं या तो :(लिए स्पष्ट रूप डॉक्स नहीं मिल सकता है मिलान स्वचालित छवि फ़ाइल नाम के लिए

नियम शामिल हो सकता है:। "आप एक अलग निब मिल रेटिना के लिए यदि आप फ़ाइल नाम के अंत में @ 2x डालें "(मुझे कोई काम नहीं है अगर यह काम करता है)।

जो मैं वास्तव में देख रहा हूं वह नियमों की एक सूची है जिसका उपयोग किया जाता है। यह बहुत सख्त कोडिंग को बचाएगा - लगभग हर एक ऐप में दोहराया गया है - अगर मैं उनके बुद्धिमान नाम मिलान का अधिक उपयोग कर सकता हूं (उदाहरण के लिए यदि उनके पास "लोड लैंडस्केप निब बनाम लोड पोर्ट्रेट निब" है)

+0

शानदार सवाल!मुझे '~ iphone' और' ipad' मिलान के बारे में भी पता नहीं था, क्योंकि ऐप्पल अपने टेम्पलेट कोड में इसका उपयोग नहीं कर रहा है! मैं यह सवाल देख लूंगा! – mbm29414

उत्तर

2

अपने (मुख्य) सवाल का जवाब, इन initWithNibName में फ़ाइल नाम मिलान के लिए नियम हैं:

... हालांकि, अगर आप एक निब नाम निर्दिष्ट नहीं करते हैं, और अपने कस्टम उपवर्ग में loadView विधि ओवरराइड नहीं करते, दृश्य नियंत्रक अन्य माध्यमों का उपयोग करते हुए एक निब फ़ाइल के लिए खोजता है। विशेष रूप से, यह एक उपयुक्त नाम (बिना .nib एक्सटेंशन के) के साथ एक nib फ़ाइल ढूंढता है और लोड करता है जब nib फ़ाइल जब भी उसका दृश्य अनुरोध किया जाता है। विशेष रूप से, यह निम्नलिखित नामों में से एक के साथ एक निब फ़ाइल के लिए लग रहा है (क्रम में):

  1. दृश्य नियंत्रक वर्ग के नाम, शब्द "नियंत्रक" के साथ समाप्त होता MyViewController में के रूप में है, यह एक निब फ़ाइल के लिए लग रहा है जिसका नाम वर्ग नाम "नियंत्रक" शब्द के बिना, MyView.nib में मेल खाता है।
  2. यह एक निब फ़ाइल की तलाश करता है जिसका नाम नियंत्रक वर्ग के नाम से मेल खाता है। उदाहरण के लिए, यदि कक्षा का नाम MyViewController है, तो यह एक MyViewController.nib फ़ाइल की तलाश में है।

UIViewController के दस्तावेज़ से तहत nibName

लेकिन वहाँ है और अधिक ... असल में NSBundle इसके अंदर संसाधनों का पता लगाने के लिए कुछ बहुत चतुर नियम है। Here is the documentation page describing these rules (देखें: आईओएस में डिवाइस-विशिष्ट संसाधन)।

जो हमें to this page लाता है जो सभी संशोधक (और मूल पैटर्न) का वर्णन करता है जिसे बंडल संसाधनों पर लागू किया जा सकता है (यह मेरा मानना ​​है कि आप छवि फ़ाइल नाम मिलान के संबंध में जो लिंक कर रहे हैं)।

+0

तो ... उन लिंक को पढ़ना ... एनआईबी फाइलों के लिए कोई विशिष्ट नियम नहीं हैं? वे सभी संसाधनों (लिंक 1) के लिए "मूल" नियम का उत्तराधिकारी हैं, लेकिन उनके पास कोई अतिरिक्त नियम नहीं है (लिंक 2) - सही? – Adam

+0

हां यह सही होगा। एक और चीज जो मैं जोड़ सकता हूं वह स्थानीयकरण के आधार पर एनआईबी फाइलों की 'स्मार्ट' लोडिंग है। चूंकि यह वास्तव में एक दिलचस्प विषय है, कोई भी जो अधिक जानकारी जोड़ सकता है वास्तव में स्वागत किया जाएगा। – Alladinian

संबंधित मुद्दे