2011-07-07 16 views
10

इस चल रहा है:वैल्यूफोर्की क्यों करता है: UITextField पर UITextInputTraits गुणों के लिए अपवाद फेंकता है?

@try 
{ 
    NSLog(@"1. autocapitalizationType = %d", [self.textField autocapitalizationType]); 
    NSLog(@"2. autocapitalizationType = %@", [self.textField valueForKey:@"autocapitalizationType"]); 
} 
@catch (NSException *exception) 
{ 
    NSLog(@"3. %@", exception); 
} 

आउटपुट इस:

1. autocapitalizationType = 0 
3. [<UITextField 0x6c15df0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key autocapitalizationType. 

मैं उम्मीद कर रहा था:

1. autocapitalizationType = 0 
2. autocapitalizationType = 0 

यह अपवाद उन लक्षणों को UITextInputTraits प्रोटोकॉल का हिस्सा हैं के साथ होता है। नियमितUITextField के गुण इस प्रकार clearButtonModevalueForKey: के माध्यम से पहुंचा जा सकता है।

तो आप कुंजी-मूल्य कोडिंग वाले UITextInputTraits गुणों का उपयोग क्यों नहीं कर सकते?

+0

कार्यान्वयन विवरण के कारण संभावित रूप से। आपको ऐप्पल के साथ एक [बग रिपोर्ट] (http://bugreport.apple.com) दर्ज करनी चाहिए। –

उत्तर

4

आप UIKit ढांचे में तल्लीन और UITextField.h को खोलने के हैं, तो आप मिल जाएगा:

@interface UITextField : UIControl <UITextInput, NSCoding> { 
    @private 

    UITextInputTraits *_traits; 
    UITextInputTraits *_nonAtomTraits; 

तुम भी मिल जाएगा कि clearButtonMode UITextField हेडर फाइल में एक @property के रूप में घोषित किया जाता है, लेकिन वह autocapitalizationType (और बाकी UITextInputTraits प्रोटोकॉल) नहीं हैं।

आप और मैं UITextField.m देखने को मिलता नहीं है, इसलिए सभी हम वास्तव में निष्कर्ष निकाल सकते हैं कि एप्पल एक तरीका है कि KVC खरी नहीं उतरती में UITextField के UITextInputTraits प्रोटोकॉल लागू किया है। संभावित रूप से गोंद कोड कहीं भी [myTextField autocapitalizationType] को उपयुक्त मान में परिवर्तित करता है, लेकिन जो कुछ भी पीछे के दृश्य जादू हो रहा है valueForKey: से कम हो जाता है।

2

यहां मेरा कामकाज है: textInputTraits विधि को लागू करने वाले प्रत्येक वर्ग के लिए मैंने valueForKey: को घुमाया। यदि कुंजी UITextInputTraits कुंजी है, तो ऑब्जेक्ट के बजाय ऑब्जेक्ट के textInputTraits पर valueForKey: पर कॉल करें।

यहां कार्यान्वयन विवरण हैं: 1, 2 और 3