ios - La aplicación se cuelga en uitextview cuando el usuario ingresa por voz
objective-c crash (1)
Lo primero que debe hacer es crear una subclase UITextView y en esa subclase anular func accessibilityActivate () -> Bool. Luego crea un delegado que maneje lo que sucede cuando TextView está activado y llámalo a través del método reemplazado.
A continuación, establezca el delegado de TextView basado en UIAccessibilityIsVoiceOverRunning (), de modo que si se ejecuta Voice Over, configure el UITextViewDelegate en nil, lo que evita que ocurra el bloqueo y luego la acción de activación se maneja con el método que anula en la subclase anterior. Finalmente, configure un oyente para UIAccessibilityVoiceOverStatusChanged y establezca el UITextViewDelegate en nil cuando vaya de off a on, y configurándolo en la clase de delegación original para el escenario opuesto.
La aplicación falla cuando el usuario ingresa texto por voz en UITextView,
Método Crash
hacer que la primera respuesta de textview haga clic en él, luego presiona el botón de micrófono en el teclado, luego habla algo y luego presiona la opción "Hecho, la aplicación falla".
Nada especial se hace con uitextview en mi caso ...
Salida de consola
*
Aplicación de finalización debido a la excepción no detectada ''NSInvalidArgumentException'', razón: ''Intento de mutar el objeto inmutable con deleteCharactersInRange:''
En primer tiro pila de llamadas: (0x19443c1c0 0x192e7455c 0x19443c108 0x1943d9b18 0x19a58d138 0x194e1a3c4 0x1943fd958 0x1943fb9e4 0x194e1a218 0x19aa9aac8 0x19aa9b270 0x19aa9a0b4 0x19aa97680 0x19aa979f0 0x19aa9afd0 0x19aa9b50c 0x19cdbf800 0x19cdbf064 0x19cdbf74c 0x19cdc4354 0x1005e925c 0x1005e921c 0x1005ee284 0x1943e9f2c 0x1943e7b18 0x194316048 0x195d99198 0x19a2e9628 0x19a2e4360 0x1001e03c4 0x1932f85b8) libc ++ abi.dylib: terminando con excepción no detectada de tipo NSException
en la depuración adicional que obtuve (al ingresar bt en la consola) me da
* thread #1: tid = 0x645a4, 0x000000019340a014 libsystem_kernel.dylib`__pthread_kill + 8, queue =
''com.apple.main-thread'', stop reason = signal SIGABRT frame # 0: 0x000000019340a014 libsystem_kernel.dylib
__pthread_kill + 8 frame #1: 0x00000001934d1460 libsystem_pthread.dylib
pthread_kill + 112 frame # 2: 0x000000019337e3f4 libsystem_c.dylibabort + 140 frame #3: 0x0000000192e492d4 libc++abi.dylib
abort_message + 132 fotograma # 4: 0x0000000192e66cc0 libc ++ abi.dylibdefault_terminate_handler() + 304 frame #5: 0x0000000192e74844 libobjc.A.dylib
_objc_terminate () + 124 fotograma # 6: 0x0000000192e6366c libc + + abi.dylibstd::__terminate(void (*)()) + 16 frame #7: 0x0000000192e62f84 libc++abi.dylib
__cxa_throw + 136 frame # 8: 0x0000000192e74690 libobjc.A.dylibobjc_exception_throw + 364 frame #9: 0x000000019443c108 CoreFoundation
+ [NSException raise: format:] + 116 frame # 10: 0x00000001943d9b18 CoreFoundationmutateError + 132 frame #11: 0x000000019a58d138 UIKit
- [UIScrollView description] + 104 frame # 12: 0x0000000194e1a3c4 Foundation_NSDescriptionWithLocaleFunc + 108 frame #13: 0x00000001943fd958 CoreFoundation
_NSDescriptionWithLocaleFunc + 108 frame #13: 0x00000001943fd958 CoreFoundation
__CFStringAppendFormatCore + marco 7996 # 14: 0x00000001943fb9e4 CoreFoundation_CFStringCreateWithFormatAndArgumentsAux2 + 244 frame #15: 0x0000000194e1a218 Foundation
+ [NSString stringWithFormat:] + 68 marco # 16: 0x000000019aa9aac8 UIKit-[UIDictationController insertSerializedDictationResult:withCorrectionIdentifier:] + 144 frame #17: 0x000000019aa9b270 UIKit
__98 - [UIDictationController finishDictationRecognitionWithPhrases: modelación del lenguaje: correctionIdentifier:] _ block_invoke + marco 464 # 18: UIKit 0x000000019aa9a0b4-[UIDictationController performIgnoringDocumentChanges:] + 48 frame #19: 0x000000019aa97680 UIKit
- [UIDictationController _runFinalizeOperation:] + 56 marco # 20: 0x000000019aa979f0 UIKit-[UIDictationController setState:] + 612 frame #21: 0x000000019aa9afd0 UIKit
- [UIDictationController finishDictationRecognitionWithPhrases: languageModel: correctionIdentifier:] + 552 frame # 22: 0x000000019aa9b50c UIKit-[UIDictationController dictationConnection:didRecognizePhrases:languageModel:correctionIdentifier:] + 204 frame #23: 0x000000019cdbf800 AssistantServices
-[UIDictationController dictationConnection:didRecognizePhrases:languageModel:correctionIdentifier:] + 204 frame #23: 0x000000019cdbf800 AssistantServices
__105- [AFDictationConnection _tellSpeechDelegateDidRecognizeSpeechPhrases: languageModel: correctionIdentifier:] _ block_invoke + 80 frame # 24: 0x000000019cdbf064 AssistantServices-[AFDictationConnection _dispatchCallbackGroupBlock:] + 240 frame #25: 0x000000019cdbf74c AssistantServices
- [AFDictationConnection _tellSpeechDelegateDidRecognizeSpeechPhrases: modelación del lenguaje: correctionIdentifier:] + 356 marco # 26: 0x000000019cdc4354 AssistantServices__101-[AFDictationConnectionServiceDelegate speechDidRecognizePhrases:usingSpeechModel:correctionContext:]_block_invoke + 76 frame #27: 0x00000001005e925c libdispatch.dylib
_dispatch_call_block_and_release + 24 marco # 28: libdispatch.dylib 0x00000001005e921c_dispatch_client_callout + 16 frame #29: 0x00000001005ee284 libdispatch.dylib
_dispatch_main_queue_callback_4CF + 1200 frame # 30: 0x00000001943e9f2c CoreFoundation__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 frame #31: 0x00000001943e7b18 CoreFoundation
__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 frame #31: 0x00000001943e7b18 CoreFoundation
__CFRunLoopRun + marco 1660 # 32: 0x0000000194316048 CoreFoundationCFRunLoopRunSpecific + 444 frame #33: 0x0000000195d99198 GraphicsServices
GSEventRunModal + marco 180 # 34: 0x000000019a2e9628 UIKit-[UIApplication _run] + 684 frame #35: 0x000000019a2e4360 UIKit
UIApplicationMain + 208 * fotograma # 36: 0x00000001001e03c4main(argc=1, argv=0x000000016fdd3ab8) + 124 at main.m:16 frame #37: 0x00000001932f85b8 libdyld.dylib
lema móvilmain(argc=1, argv=0x000000016fdd3ab8) + 124 at main.m:16 frame #37: 0x00000001932f85b8 libdyld.dylib
inicio + 4
Código utilizado
@property(strong,nonatomic) UITextView *addressTextView;
- (void)viewDidLoad {
[super viewDidLoad];
addressTextView.delegate = self;
addressTextView.text = [self.dictionaryEditObject objectForKey:@"location"];
}
-(void)textViewDidBeginEditing:(UITextView *)textView
{
}
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
NSLog(@"textViewShouldBeginEditing:");
return YES;
}
-(void)textViewDidEndEditing:(UITextView *)textView
{
NSLog(@"textViewDidEndEditing");
}
probado en iOS: dispositivo 10.2.9.3: bloqueo del iPad, iPod, iPhone 5s en cada dispositivo
Cualquier ayuda será apreciada, gracias