2014-04-03 7 views
7

के साथ त्रुटि जब मैं UISearchBar पर पूर्ववत करने का प्रयास करता हूं तो मेरा ऐप क्रैश हो जाता है। मेरे एप्लिकेशन में मैं खोज पट्टी पर एक '%' पर हस्ताक्षर में प्रवेश को रोकने के लिए कोड है और ऐसा करने के लिए यह करने के लिए एक% की जगह @ "" के रूप में नीचे textDidChange विधि में:"[NSBigMutableString substringWithRange:]: रेंज {0, 10} सीमाओं से बाहर; स्ट्रिंग लम्बाई 9" पूर्ववत

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""]; 
} 

तो अगर मैं टाइप पाठ "abc % xyz ", खोज बार पर दिखाई देने वाला अंतिम पाठ 'abcxyz' होगा। जब मैं पूर्ववत क्लिक करता हूं, तो मुझे लगता है कि 'xyz' साफ़ हो जाता है और मैं अभी भी 'abcxyz' को साफ़ करने के बजाय खोज बार पर 'abc' देखता हूं।

अब अगर मैं 'abc' को साफ़ करने के लिए पूर्ववत पर क्लिक करता हूं तो मेरा ऐप [NSBigMutableString substringWithRange:]: Range out of bounds त्रुटि के साथ क्रैश हो जाता है।

मुझे लगता है कि '%' को @ "" से बदल दिया गया है, फिर भी पूर्ववत प्रबंधक इसे पकड़ रहा है और इसलिए सीमा सीमा से बाहर जा रही है।

मैंने [searchBar.undoManager removeAllActions];textDidChange में "@" के साथ% बदलने के बाद कोशिश की, लेकिन इससे मदद नहीं मिली। यहाँ कोड है:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
    { 
     self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""]; 
     [searchBar.undoManager removeAllActions]; 
    } 

प्रश्न: किसी से पहले इसी तरह के मुद्दे का सामना करना पड़ा? मैं पूर्ववत कैसे संभाल सकता हूं?

+0

हालांकि removaAllActions मेरे लिए काम किया। हमने अंततः हमारे ऐप के लिए पूर्ववत करने के लिए शेक बंद करने का विकल्प चुना। – SuperGuyAbe

उत्तर

1

इसके बजाय आप इस प्रतिनिधि विधि का उपयोग किया जाना चाहिए:

 - (BOOL)searchBar:(UISearchBar *)searchBar 
    shouldChangeTextInRange:(NSRange)range 
      replacementText:(NSString *)text 

और बस मामले में कोई वापसी replacementText "%" के बराबर है। यह उपयोगकर्ता को इसे पहले स्थान पर उपयोग करने से रोक देगा क्योंकि यह टेक्स्टफील्ड को अपडेट नहीं करेगा, जो आपके द्वारा किए गए पूर्ववत समस्या को ठीक करना चाहिए।

समाधान

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if([text isEqualToString:@"%"]) { 
     return NO; 
    } 

    return YES; 
} 
संबंधित मुद्दे