UITextView delegate method textView: shouldChangeTextInRange: replacementText: da un text de reemploop erróneo en la eliminación rápida

Tengo una UITextView y estoy grabando todos los events de cambio de vista de text en una matriz.

Cuando el usuario está eliminando rápidamente (manteniendo pulsada la tecla de eliminación para eliminar las palabras a la vez y no solo un carácter), cuando se invoca el método textView: shouldChangeTextInRange: replacementText, la longitud de la variable de range es solo 1, cuando en realidad el range debe ser el número de letras borradas en la palabra. ¿Alguien sabe de alguna solución a este error de Apple para poder identificar correctamente la location y el range y el text cambiado en UITextView?

No, no es un error. Esta function recibirá una llamada cada vez que cambie su text. Probablemente esté trabajando con el modo de debugging y dando retroceso con el keyboard. Generará un evento múltiple antes de llegar al punto de interrupción. Entonces, la function recibirá llamadas múltiples veces.

Como mencionaste en tu pregunta, el 'range' siempre es 1, incluso si se elimina una palabra completa. Debe verificar la longitud del range 'range.length', lo que le proporcionará el número exacto de caracteres que se eliminarán de su UITextView. Tuve el mismo escenario y hice algunos trabajos basados ​​en él que solo permitirán eliminar un solo carácter a la vez, no toda la palabra:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if([text isEqualToString:@""]) { // Check if length of range being deleted is less than 1 then only delete it if (range.length > 1) { return NO; } else return YES; } else { return YES; } }