2010-04-26 17 views
6

मेरे पास NSTextField है जिसमें मुझे उपयोगकर्ता को अधिकतम और न्यूनतम के बीच एक संख्या दर्ज करने की आवश्यकता है, और यह अच्छा होगा अगर मुझे पता चल जाए कि NSNumberFormatter उस विशेष परीक्षण में विफल रहता है, तो मैं या तो प्रदर्शित कर सकता हूं nicer संदेश ("संख्या बहुत बड़ी है" बहुत उपयोगी नहीं है, इसे वैध सीमा प्रदर्शित करने की आवश्यकता है) या बस फ़ील्ड को स्वचालित रूप से निकटतम मान्य मान पर सेट करें।अधिक विशिष्ट NSNumberFormatter विफलता व्यवहार

मैं NSTextField प्रतिनिधि के ‑control:didFailToFormatString:errorDescription: विधि है जो आप त्रुटि संशोधित करने की अनुमति नहीं लगती को देखा है, और मैं अधिभावी देखा है NSNumberFormatter के ‑getObjectValue:forString:range:error: विधि है जो मुझे एक NSError कि मैं संशोधित कर सकते हैं देता है , लेकिन यह निर्धारित करने का कोई तरीका नहीं है कि कौन सी विशिष्ट त्रुटि लौटा दी गई है।

चूंकि मैं बस एक साधारण पूर्णांक दर्ज कर रहा हूं, मुझे NSNumberFormatter में अधिकांश कार्यक्षमता की आवश्यकता नहीं है, क्या मैं सिर्फ अपने स्वयं के फॉर्मेटर को स्क्रैच से लिखना बेहतर होगा?

उत्तर

1

यह निर्धारित करने का एक तरीका है कि एनएसईआरआर में कौन सी त्रुटि लौटा दी जाती है। NSError error codes documentation अधिकतम और न्यूनतम सत्यापन विफल होने के लिए त्रुटियों को परिभाषित करता है। बस अपने एनएसईआरआर ऑब्जेक्ट पर -code भेजें।

+0

धन्यवाद, लेकिन NSFormattingErrorMinimum/अधिकतम का मतलब है कि वे स्वरूपण त्रुटि कोड की शुरुआत और अंत हैं। लौटाए गए त्रुटि कोड 2048 है इससे कोई फर्क नहीं पड़ता कि प्रारूपण त्रुटि क्या प्रतीत होती है। –

1

मैं अनुशंसा करता हूं कि NSNumberFormatter में उन सीमाओं को लागू करने के बजाय, आप उन्हें textDidChange: पर होने वाले तर्क में लागू करें। आपके विवरण से आपको लगता है कि आप अपने नंबर फॉर्मेटर को जोड़ने के लिए इंटरफ़ेस बिल्डर का उपयोग कर सकते हैं। इसके बजाय मैं आपके नियंत्रक को विशेष टेक्स्टफील्ड के लिए NSTextFieldDelegate बना दूंगा। फिर आप सीधे संख्या स्वरूपक के साथ बातचीत को संभालने के लिए मिलता है और आप टेक्स्ट को किसी विशेष त्रुटि लेबल के लिए उचित रूप से सेट कर सकते हैं। इसके अतिरिक्त यह आपको अधिक जटिल संदर्भ निर्भर फॉलबैक मान देने की अनुमति देता है। उर्फ: कुछ मामलों में आप हमेशा चाहते हैं कि संख्या एक मध्य श्रेणी, या निचले सिरे पर, या पुराने मूल्य पर, या जो भी उपयोगकर्ता किनारे पर दौड़ने के लिए वापस आ जाए। यह आपको ब्लैकआउट श्रेणियों को लागू करने की अनुमति देगा, या स्पष्ट विशिष्ट परिशुद्धता में असाधारण रूप से लंबे दशमलव को मजबूत करेगा।

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