2010-07-05 8 views
15

प्रतिNSDateFormatter की init विधि को बहिष्कृत किया गया है?

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

NSDateFormatter की init विधि "iPhone OS 2.0 iPhone OS 3.2 के माध्यम से में उपलब्ध है" है, और इसलिए 4.0 में नहीं । अब, यह निश्चित रूप से काम करता है, लेकिन यह अजीब लगता है। क्या यह एक गलती है या NSDateFormatter बनाने का कोई और तरीका है?

+0

आपने यह कहां पढ़ा? – prgmast3r

+0

आधिकारिक दस्तावेज: http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/DeprecationAppendix/AppendixADeprecatedAPI.html – bontoJR

+0

मुझे पूरा यकीन है कि "setLocale" और "setTimeStyle" हैं ऐसा करने के सही तरीके, मैं सिर्फ उत्सुक हूं कि अब आपको NSDateFormatter इंस्टेंस कैसे प्राप्त करना है? – fuzzygoat

उत्तर

18

यह बहिष्कार सिर्फ एनएसडीएटीफॉर्मेटर के लिए हेडर को साफ करने सेब है। इनिट को एनएसओब्जेक्ट में पहले ही घोषित किया गया है जो एनएसएनंबरफॉर्मेटर से विरासत में आता है। पुनर्वितरण आवश्यक नहीं है, हालांकि कार्यान्वयन सेब में init ओवरराइड होगा क्योंकि सबक्लासस को सुपरक्लास के डिफ़ॉल्ट प्रारंभकर्ता के लिए कार्यान्वयन प्रदान करना चाहिए।

+0

उस स्पष्टीकरण के लिए बहुत बहुत धन्यवाद। ऐप्पल के हिस्से पर बहुत भ्रामक। इसे बहिष्कृत के रूप में चिह्नित नहीं किया जाना चाहिए। – dmkash

+0

हालांकि, इस वर्ग के कार्यान्वयन का वर्णन करने के लिए, इस वर्ग के लिए इनिट विधि के लिए * दस्तावेज़ीकरण * अभी भी उपयोगी है। जैसे "डिफॉल्ट प्रारूप के साथ फॉर्मेटर प्रारंभ करता है", आदि – user102008

0

मैं कई आईओएस 4 ऐप्स में इनिट विधि का उपयोग करता हूं और वे अनुमोदित और स्टोर में हैं। मैं इसे काम करने के लिए कोई रास्ता नहीं सोच सकता, इसलिए यह दस्तावेज़ों पर सिर्फ एक टाइपो जैसा प्रतीत होता है।

0

कक्षा संदर्भ में उदाहरण कोड अभी भी init विधि का उपयोग करता है, इसलिए मैं इसे अपने कोड में उपयोग करने के लिए सुरक्षित कहूंगा।

1

यह वास्तव में अजीब है। शायद +[NSDateFormatter new] काम करेगा?

+3

यदि 'init' को बहिष्कृत किया गया है, तो '+ new' भी है, क्योंकि' + new' कुछ भी नहीं है लेकिन 'alloc/-init' वैसे भी (लेकिन अच्छा अनुमान) है। – bbum

2

मैं प्रलेखन पर शीर्षलेख फ़ाइलों पर भरोसा करता हूं।

उदाहरण के लिए, Formatter Behaviors and OS Versions ही खंडन करने के लिए लगता है:

डिफ़ॉल्ट रूप से, के रूप में वे 10.0 10.3 मैक ओएस एक्स संस्करणों पर किया NSDateFormatter के मैक ओएस एक्स v10.4 उदाहरणों पर एक ही व्यवहार किया है। मैक ओएस एक्स v10.5 और बाद में, NSDateFormatter 10.4+ व्यवहार के लिए डिफ़ॉल्ट है।

यदि आप initWithDateFormat:allowNaturalLanguage: का उपयोग करके एक फॉर्मेटर प्रारंभ करते हैं, तो आप "पुरानी शैली" दिनांक फ़ॉर्मेटर बनाने के पीछे (पीछे की संगतता कारणों के लिए) हैं। नए व्यवहार का उपयोग करने के लिए, आप init के साथ फ़ॉर्मेटर प्रारंभ करें। यदि आवश्यक हो, तो आप setDefaultFormatterBehavior: का उपयोग कर डिफ़ॉल्ट वर्ग व्यवहार सेट कर सकते हैं), आप तर्क setFormatterBehavior: संदेश NSDateFormatterBehavior10_4 के साथ संदेश का उपयोग कर सकते हैं।

ऐसा लगता है कि initWithDateFormat:allowNaturalLanguage: वास्तव में बहिष्कृत विधि है?

+0

बिल्कुल सही, ऐसा लगता है कि 'initWithDateFormat: अनुमति प्राकृतिक भाषा:' वास्तव में बहिष्कृत विधि है। हेडर फाइलें इस तरह की परिस्थितियों में किसी को संदर्भित करनी चाहिए। – paulbailey

6

falconcreek की तरह here कहा, ऐप्पल सिर्फ दस्तावेज़ों को साफ़ कर रहा है।

इसका मतलब है कि मूल रूप से, - (id) init को NSDateFormatter हेडर फ़ाइल में फिर से देखा गया है। वह अनावश्यक था और किसी ने इसे बाद में हटा दिया। प्रलेखन शायद स्वचालित रूप से जेनरेट किया जाता है और यह नहीं उठाया जाता है कि यह केवल उन्मूलन था जिसे बहिष्कृत किया गया था।

संक्षेप में, init का उपयोग करें जैसा कि आप NSDateFormatter के साथ चाहते हैं!

+1

मुझे लगता है कि डॉक्यूमेंटेशन अत्यधिक भ्रामक है। मैंने ऐप्पल को टिप्पणी भेजने के लिए "कोई सहायक नहीं" लिंक का उपयोग किया है। – JeremyP

0

आप अपने आप को प्रमाणित कर सकते हैं कि NSDateFormatter आपके द्वारा चुने गए प्रारंभकर्ता और एसडीके के साथ संकलित एक अलग व्यवहार है। निम्नलिखित एसडीके 10.5 और 10.6 के साथ परीक्षण किया जाता है।

NSDateFormatter* df = [[NSDateFormatter alloc] initWithDateFormat:@"yyyyMMdd" allowNaturalLanguage:NO]; 
if ([df formatterBehavior] == NSDateFormatterBehavior10_0) 
    NSLog(@"NSDateFormatterBehavior10_0"); 
else if ([df formatterBehavior] == NSDateFormatterBehavior10_4) 
    NSLog(@"NSDateFormatterBehavior10_4"); 

यह NSDateFormatterBehavior10_0 देता है।
इसके बजाय, जब आप [[NSDateFormatter alloc] init]; का उपयोग करते हैं तो व्यवहार NSDateFormatterBehavior10_4 है।