【问题标题】:App Crashes uitextview when user inputs via voice当用户通过语音输入时,应用程序崩溃 uitextview
【发布时间】:2017-11-08 08:46:25
【问题描述】:

当用户在 UITextView 中通过语音输入文本时应用崩溃,

崩溃方法

通过点击 textview 来制作第一响应者,然后按下键盘上的麦克风按钮,然后说出一些内容,然后按下 Done 应用程序崩溃..

在我的情况下,uitextview 没有什么特别的..

控制台输出

*

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'尝试改变不可变 带有 deleteCharactersInRange 的对象:'

  • 第一次抛出调用堆栈:(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:终止于 NSException 类型的未捕获异常

我得到了进一步的调试(通过在控制台中输入 bt)它给了我

* thread #1: tid = 0x645a4, 0x000000019340a014 libsystem_kernel.dylib`__pthread_kill + 8, queue =

'com.apple.main-thread',停止原因 = 信号 SIGABRT 帧#0:0x000000019340a014 libsystem_kernel.dylib__pthread_kill + 8 frame #1: 0x00000001934d1460 libsystem_pthread.dylibpthread_kill + 112 帧#2:0x000000019337e3f4 libsystem_c.dylibabort + 140 frame #3: 0x0000000192e492d4 libc++abi.dylibabort_message + 132 帧#4:0x0000000192e66cc0 libc++abi.dylibdefault_terminate_handler() + 304 frame #5: 0x0000000192e74844 libobjc.A.dylib_objc_terminate() + 124 第 6 帧:0x0000000192e6366c libc++abi.dylibstd::__terminate(void (*)()) + 16 frame #7: 0x0000000192e62f84 libc++abi.dylib__cxa_throw + 136 第 8 帧:0x0000000192e74690 libobjc.A.dylibobjc_exception_throw + 364 frame #9: 0x000000019443c108 CoreFoundation+[NSException raise:format:] + 116 帧 #10: 0x00000001943d9b18 CoreFoundationmutateError + 132 frame #11: 0x000000019a58d138 UIKit-[UIScrollView 描述] + 104 帧#12:0x0000000194e1a3c4 Foundation_NSDescriptionWithLocaleFunc + 108 frame #13: 0x00000001943fd958 CoreFoundation__CFStringAppendFormatCore + 7996 帧 #14: 0x00000001943fb9e4 CoreFoundation_CFStringCreateWithFormatAndArgumentsAux2 + 244 frame #15: 0x0000000194e1a218 Foundation+[NSString stringWithFormat:] + 68 帧#16:0x000000019aa9aac8 UIKit-[UIDictationController insertSerializedDictationResult:withCorrectionIdentifier:] + 144 frame #17: 0x000000019aa9b270 UIKit__98-[UIDictationController finishDictationRecognitionWithPhrases:languageModel:correctionIdentifier:]_block_invoke + 464 帧 #18: 0x000000019aa9a0b4 UIKit-[UIDictationController performIgnoringDocumentChanges:] + 48 frame #19: 0x000000019aa97680 UIKit-[UIDictationController _runFinalizeOperation:] + 56 帧 #20: 0x000000019aa979f0 UIKit-[UIDictationController setState:] + 612 frame #21: 0x000000019aa9afd0 UIKit-[UIDictationController finishDictationRecognitionWithPhrases:languageModel:correctionIdentifier:] + 552 帧 #22: 0x000000019aa9b50c UIKit-[UIDictationController dictationConnection:didRecognizePhrases:languageModel:correctionIdentifier:] + 204 frame #23: 0x000000019cdbf800 AssistantServices__105-[AFDictationConnection _tellSpeechDelegateDidRecognizeSpeechPhrases:languageModel:correctionIdentifier:]_block_invoke + 80 帧 #24: 0x000000019cdbf064 AssistantServices-[AFDictationConnection _dispatchCallbackGroupBlock:] + 240 frame #25: 0x000000019cdbf74c AssistantServices-[AFDictationConnection _tellSpeechDelegateDidRecognizeSpeechPhrases:languageModel:correctionIdentifier:] + 356 帧#26:0x000000019cdc4354 AssistantServices__101-[AFDictationConnectionServiceDelegate speechDidRecognizePhrases:usingSpeechModel:correctionContext:]_block_invoke + 76 frame #27: 0x00000001005e925c libdispatch.dylib_dispatch_call_block_and_release + 24 帧 #28:0x00000001005e921c libdispatch.dylib_dispatch_client_callout + 16 frame #29: 0x00000001005ee284 libdispatch.dylib_dispatch_main_queue_callback_4CF + 1200 帧#30:0x00000001943e9f2c CoreFoundation__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 frame #31: 0x00000001943e7b18 CoreFoundation__CFRunLoopRun + 1660 帧#32:0x0000000194316048 CoreFoundationCFRunLoopRunSpecific + 444 frame #33: 0x0000000195d99198 GraphicsServicesGSEventRunModal + 180 帧 #34: 0x000000019a2e9628 UIKit-[UIApplication _run] + 684 frame #35: 0x000000019a2e4360 UIKitUIApplicationMain + 208 * 帧 #36: 0x00000001001e03c4 座右铭-mobilemain(argc=1, argv=0x000000016fdd3ab8) + 124 at main.m:16 frame #37: 0x00000001932f85b8 libdyld.dylibstart + 4

使用的代码

@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");
}

试穿 iOS:10.2、9.3 设备:iPad、iPod、iPhone 5s 在每台设备上崩溃

任何帮助将不胜感激 谢谢

【问题讨论】:

  • 请添加一些代码,否则不清楚如何指出您的问题。
  • 但是我在这里看不到任何代码...
  • 位置值是否在搅拌?一次格式化并检查
  • 是的,因为它成功地将文本添加到 textView...
  • 把代码放在你使用deleteCharactersInRange的地方。

标签: ios objective-c crash uitextview voice


【解决方案1】:

要做的第一件事是继承 UITextView 并在该子类中覆盖 func accessibilityActivate() -> Bool。然后创建一个委托来处理激活 TextView 时发生的情况,并通过覆盖的方法调用它。

然后根据 UIAccessibilityIsVoiceOverRunning() 设置 TextView 的委托,因此如果正在运行语音,则将 UITextViewDelegate 设置为 nil 以防止发生崩溃,然后通过您在上面的子类中覆盖的方法处理激活操作.最后,为 UIAccessibilityVoiceOverStatusChanged 设置一个监听器,在从 off 到 on 时将 UITextViewDelegate 设置为 nil,并为相反的场景将其设置为原始委托类。

【讨论】:

  • 抱歉没找到你..,你指的是哪个子类?
  • 我指的是 UITextView 的子类化
猜你喜欢
  • 2015-02-10
  • 2014-12-06
  • 2017-04-24
  • 1970-01-01
  • 2020-07-31
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多