2011-11-15 5 views
7

पर किसी और को इसका सामना करना पड़ा है? निम्नलिखित कोड आईओएस 4 सिम्युलेटर पर चलते समय "हाँ" रिपोर्ट करता है लेकिन ऐप्पल दस्तावेज़ों के अनुसार विधि addChildViewController केवल आईओएस 5 और बाद में उपलब्ध है। यह सही व्यवहार की तरह प्रतीत नहीं होता है, क्या यह एक बग है?UIViewController को addChildViewController का जवाब देने के रूप में रिपोर्ट किया गया: आईओएस 4

if([UIViewController instancesRespondToSelector:@selector(addChildViewController:)]) { 
    NSLog(@"YES"); 
} else { 
    NSLog(@"NO"); 
} 
+1

मुझे यकीन नहीं है कि ऐसा क्यों होता है लेकिन मैंने पुष्टि की कि मैं एक्सकोड 4.2 में एक ही चीज़ देखता हूं। मैं अपने तैनाती लक्ष्य को 4.0 तक भी सेट करना चाहता था। उदाहरण के लिए स्वचालित रूप से एक ही परीक्षण करना ForwardAppearanceAndRotationMethodsToChildViewControllers उदाहरण के लिए नहीं देता है। – Joel

+0

इसे चलाने की कोशिश करते समय यह चेतावनी प्रदर्शित करता है? यह संभव है कि उस विधि को 4.0 में शामिल किया गया था लेकिन निजी है, हालांकि आम तौर पर निजी तरीकों का उनके सामने _ होता है ... तो अजीब – Daniel

+0

लगता है यह एक निजी एपीआई हो सकता है कि ऐप्पल आईओएस 4 का उपयोग और परीक्षण कर रहा था। अब यह उत्पादन है तैयार है, इसे अभी आईओएस 5 के साथ सार्वजनिक खपत के लिए जारी किया जा सकता है। मुझे यकीन नहीं है, बस यहां गेंदबाजी थूकना। –

उत्तर

3

मुझे लगता है कि यह एक बग है। AddChildViewController को कॉल करना किसी भी चेतावनी या त्रुटि के बिना भी चल रहा है।

मैं निम्नलिखित viewDidLoad लिखा है:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    MyChildView *aChildViewController = [[MyChildView alloc] initWithNibName:@"MyChildView" bundle:nil]; 

    // Do any additional setup after loading the view, typically from a nib. 
    SEL mySelector = @selector(addChildViewController:); 
    if([UIViewController instancesRespondToSelector:mySelector] == YES) { 
     NSLog(@"YES addChildViewController:"); 
     [self addChildViewController:aChildViewController]; 
    } else { 
     NSLog(@"NO addChildViewController:"); 
    } 

    if([UIViewController instancesRespondToSelector:@selector(automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers)] == YES) { 
     NSLog(@"YES automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers"); 

    } else { 
     NSLog(@"NO automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers"); 
    } 
} 

iOS 4.3 सिम्युलेटर में मैं उत्पादन निम्नलिखित देखें। दोनों संदेश आईओएस 5.0 और उच्चतर तक सीमित हैं। ऐसा लगता है कि AddChildViewController 4.3 सिम्युलेटर में गलत तरीके से प्रतिक्रिया दे रहा है। मेरे पास एक वास्तविक डिवाइस पर परीक्षण करने के लिए 4.3 डिवाइस नहीं है।

2011-11-18 09:55:12.161 testViewFunctionality[873:b303] YES addChildViewController: 
2011-11-18 09:55:12.162 testViewFunctionality[873:b303] NO automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers 

आईओएस 5.0 सिम्युलेटर दोनों में सही व्यवहार है जो प्रतिक्रिया करता है।

2011-11-18 09:59:31.250 testViewFunctionality[932:f803] YES addChildViewController: 
2011-11-18 09:59:31.252 testViewFunctionality[932:f803] YES automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers 

मैं शेर पर एक्सकोड 4.2 का उपयोग कर रहा हूं। जब मैं 4.3 सिम्युलेटर के ढांचे पर UIViewController.h को देखता हूं तो addChildViewController का कोई उल्लेख नहीं है: या स्वचालित रूप से फॉरवर्डएपियरेंस एंडरोटेशन मैथ्यूज टू चिल्डव्यू कंट्रोलर लेकिन एकमात्र एसडीके शामिल 5.0 है।

enter image description here

मुझे लगता है कि अगर आप सतर्क होना चाहते थे आपके द्वारा चलाए जा डिवाइस पर चल iOS संस्करण का परीक्षण कर सकता है। How to check iOS version?

+0

@ चयनकर्ता चेक न करें! ऐप्पल के पास इसे पहले से ही * थोड़ा * अलग-अलग निजी एपीआई तैयार किया जाता है, इससे पहले इसे जनता को रिलीज़ किया जाता है। CoreFoundation-Version के लिए हमेशा चेक का उपयोग करें। कहीं ज्यादा सुरक्षित। (उदाहरण के लिए बहुत से ऐप्स 3.2 में यूआईस्क्रीन स्केल के साथ दुर्घटनाग्रस्त हो गए जो> = 4.0 सार्वजनिक पैमाने की संपत्ति से काफी अलग काम करते थे) – steipete

0

हां, यह एक बग है और इसे कभी भी ठीक नहीं किया जाएगा। एक कामकाज के रूप में, addChildViewController: विधि की उपलब्धता की जांच करने के बजाय, आप removeFromParentViewController विधि की जांच कर सकते हैं। उत्तरार्द्ध आईओएस 5.0 से पहले उपलब्ध नहीं है।

0

यह संभव है कि यह विधि आईओएस के पिछले संस्करण में मौजूद हो, लेकिन यह अभी तक सार्वजनिक नहीं था। ऐप्पल आमतौर पर अंडरस्कोर के साथ निजी तरीकों को तैयार करता है लेकिन इसे पहले इस तरह की चीज करने के लिए जाना जाता है।