Как обнаружить два разных вида разрешения
У меня есть код разрешения для обнаружения только микрофона, а затем распознавание речи для открытия нового представления. Но код, приведенный ниже, создал ошибку типа "Это приложение модифицирует механизм автоматической разметки из фонового потока после обращения к нему из основного потока. Это может привести к повреждению двигателя и странным сбоям".
Может ли кто-нибудь иметь какие-либо идеи?
if (@available(iOS 10.0, *)) {
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// [self detechUserSpeechPermission];
// [self configureSpeechToTextView];
[SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {
switch (status) {
case SFSpeechRecognizerAuthorizationStatusAuthorized:
[self configureSpeechToTextView];
break;
case SFSpeechRecognizerAuthorizationStatusDenied:
[self warnUserForSpeechPermission];
break;
case SFSpeechRecognizerAuthorizationStatusNotDetermined:
[self warnUserForSpeechPermission];
break;
case SFSpeechRecognizerAuthorizationStatusRestricted:
[self warnUserForSpeechPermission];
break;
default: break;
} }];
}
else {
[self warnUserForMicrophonePermission];
}
}];
} else {
NSLog(@"low ios version");
}
1 ответ
Решение
Попробуйте вызвать методы в основном потоке, как показано ниже:
dispatch_async(dispatch_get_main_queue(), ^{
[self configureSpeechToTextView];
});