Meine Klasse ist als das Textfeld ein Delegierter registriert, und einen Teil seiner Funktion beinhaltet die Umsetzung textfield: shouldChangeCharactersInRange: wie diese replacementString:iOS app Absturz auf UITextFieldDelegateMethod diakritischen von Hardware-Tastatur eingeben
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
self.stateHolder.fieldValue = [self.stateHolder.fieldValue stringByReplacingCharactersInRange:range withString:string];
return YES;
}
Ich begann einen Absturz zu bemerken wenn Sie diakritische Zeichen von der Hardware-Tastatur in ein leeres Textfeld eingeben. Hier ist der Fehler ich sehe:
Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds'
Es scheint, dass, wenn von einer Hardware-Tastatur die diakritischen Eingabe des Bereichs, der es mit der Eingabe verbunden ist, ist „location = 1, Länge = 0“. Dies ist der Grund dafür, dass beim Versuch, sie in der Zeichenfolge zu speichern, eine Ausnahmebedingung ausgelöst wird. Kennt jemand einen Weg um diesen Unfall herum?
warum u stringByReplacingCharactersInRange Sie sich auch was tut self.stateHolder.fieldValue zu halten? –
Der Feldwert ist nur eine Zeichenfolge. Und ich benutze "String ByReplacingCharacters ...", weil es einfach ist, dieses Feld auf dem neuesten Stand zu halten. – Chris
Die Länge des fieldValue sollte größer oder gleich der Länge der Ersatzzeichenfolge sein. –