कोको बाइंडिंग में मुझे हमेशा एक समस्या है जो त्रुटि प्रस्तुति हुई है, उदाहरण के लिए जब उपयोगकर्ता एक फॉर्मेटर के साथ टेक्स्ट फ़ील्ड में गलत मान टाइप करता है। आम तौर पर मैं उत्तरदाता श्रृंखला में कहीं willPresentError:
ओवरराइड करता हूं, लेकिन मेरी समस्या यह है कि बाइंडिंग सिस्टम द्वारा बनाई गई एनएसईआरआरआर ऑब्जेक्ट्स में मेरे लिए पर्याप्त जानकारी नहीं है कि क्या असफल रहा है, या यदि यह भी एक त्रुटि है, तो मुझे अनुकूलन में दिलचस्पी है। मैं समीकरण से बाइंडिंग को पूरी तरह से हटा सकता हूं और सत्यापन की समस्या होने पर अपनी त्रुटियों को बना सकता हूं, लेकिन मुझे लगता है कि मैं इस तरह से कुछ उपयोगी चीजें फेंक रहा हूं।बाइंडिंग शामिल होने पर मैं एनएसईआरआर प्रस्तुति को ओवरराइड कैसे करूं?
मैं एनएससींट्रोल प्रतिनिधि विधियों को लागू करके और मेरे नियंत्रण नियंत्रक में एक इंस्टेंस चर में विफल नियंत्रण को संग्रहीत करके इसे प्राप्त करने में सक्षम हूं। यदि willPresentError:
समय के आधार पर यह गैर-शून्य है, तो मुझे पता है कि मान्य करने में क्या असफल रहा।
- (BOOL)control:(NSControl *)control didFailToFormatString:(NSString *)string errorDescription:(NSString *)error;
{
_errorSender = [control retain];
return NO;
}
- (NSError *)willPresentError:(NSError *)error;
{
if (_errorSender != nil)
{
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:[error userInfo]];
NSString *help = NSLocalizedString(@"Why are you always messing up? You are a terrible person.", @"");
[_errorSender release];
_errorSender = nil;
[userInfo setObject:help forKey:NSLocalizedRecoverySuggestionErrorKey];
return [NSError errorWithDomain:[error domain] code:[error code] userInfo:userInfo];
}
return [super willPresentError:error];
}
यह काम करता है जब पहला जवाब बदलावों, लेकिन जब मैं दृश्य नियंत्रक पर commitEditing
फोन है, तो यह मेरे लिए केवल आंशिक रूप से उपयोगी है नहीं।
एकमात्र अन्य विकल्प जो मैं देख सकता हूं, समीकरण के बाहर NSFormatter ले रहा है, और मेरे कोर डेटा प्रबंधित ऑब्जेक्ट्स में सत्यापन को संभालने के लिए validateValue:forKey:error:
का उपयोग कर रहा है। यह एक फॉर्मेटर का उपयोग करने के रूप में मेरे लिए ज्यादा समझ में नहीं आता है, लेकिन कम से कम मैं एनएसईआरआर ऑब्जेक्ट पर पूर्ण नियंत्रण रखूंगा।
मुझे लगता है कि त्रुटि प्रबंधन के साथ इस तरह के डिस्कनेक्ट होने के लिए मुझे कुछ याद आना चाहिए। कोई सुझाव?
मैं NSFormatter subclassing कर रहा हूँ, और बाइंडिंग एनएसएसटींग त्रुटि संदेश का उपयोग करता है, मैं अंतिम एनएसएएलर्ट अभी भी बहुत ही नंगे हड्डियों को प्रदान करता हूं (मैं कम से कम त्रुटि पर एक रिकवरी सुझाव जोड़ना चाहता हूं)। मैं जो सत्यापन कर रहा हूं वह ऐसा लगता है कि यह मेरे NSFormatter उप-वर्गों के लिए बेहतर है, इसलिए मैं अपने मॉडल पर कुंजी-मान सत्यापन लागू करने में संकोच नहीं कर रहा हूं। मैं सभी प्रकार के स्ट्रिंग पार्सिंग को समाप्त कर दूंगा जिसमें डेटा मॉडल के साथ कुछ लेना देना नहीं है, बस कुछ गलत होने पर फ्रंट एंड त्रुटि संदेश को कस्टमाइज़ करने में सक्षम होना चाहिए। –