मैं एक प्रतिनिधि वस्तु NumericTextFieldDelegate
तो नामित अपने ही वर्ग में UITextFieldDelegate को लागू बनाया है मैं इस तरह से मेरी नियंत्रक में प्रतिनिधि प्रारंभ की है उत्पन्न करता है संकलक से यह चेतावनी:सीधे प्रारंभ प्रतिनिधि एआरसी चेतावनी और EXC_BAD_ACCESS दुर्घटना
Assigning retained object to unsafe property; object will be released after assignment
इसका मतलब है कि जब मैं आवेदन चलाने के लिए और मैं UITextField ध्यान केंद्रित है कि वस्तु असाइनमेंट के बाद और वास्तव में जारी किया जाएगा मैं एक EXC_BAD_ACCESS
एक मिल nd ऐप्लिकेशन क्रैश ...
एक ही तरीका है कि मैंने पाया एक कारखाने विधि है कि NumericTextFieldDelegate
के कहने प्रेषण के साथ एक स्थिर चर पैदा कर रही है यह काम कर रहे हैं:
@interface NumericTextFieldDelegate : NSObject <UITextFieldDelegate>
+(NumericTextFieldDelegate *) getDelegate;
@end
@implementation NumericTextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
// This allows backspace
if ([resultingString length] == 0) {
return true;
}
NSInteger holder;
NSScanner *scan = [NSScanner scannerWithString: resultingString];
return [scan scanInteger: &holder] && [scan isAtEnd];
}
+(NumericTextFieldDelegate *) getDelegate {
static NumericTextFieldDelegate *del;
@synchronized(del) {
if(del == nil)
del = [NumericTextFieldDelegate new];
}
return del;
}
@end
और फिर जब मैं आवंटित इस तरह से प्रतिनिधि:
textFieldName.delegate = [NumericTextFieldDelegate getDelegate];
सब कुछ अच्छी तरह से काम करता है, लेकिन मेरे सवाल यह है:
क्यों मैं बस नहीं कर सकते कक्षा का एक अज्ञात नया उदाहरण असाइन करें? असाइनमेंट के बाद ऑब्जेक्ट स्वचालित रूप से क्यों जारी किया जाता है?
मुझे इस कामकाज की आवश्यकता क्यों है?
धन्यवाद।
यह एक यूआईटीएक्स्टफाल्ड है, कस्टम नहीं। – aleroot
विधि 'प्राप्त' के साथ उपसर्ग नहीं किए जाने चाहिए जब तक कि वे एक बहुत ही विशिष्ट प्रकार (जो यह नहीं है) हैं। – bbum
@bbum मुझे जावा से प्राप्त उपसर्ग मिला है :-) टिप – aleroot