Отправка текста распознавания голоса WatchKit на другой интерфейсный контроллер

У меня возникла проблема с отправкой продиктованного текста на другой контроллер интерфейса.

Вот мой код:

- (IBAction)voiceRecognition {

    [self presentTextInputControllerWithSuggestions:nil allowedInputMode:WKTextInputModePlain completion:^(NSArray *results) {

        NSLog(@"results: %@", results);

        NSString *wordKey = [NSString stringWithFormat:@"%@",results];
        NSDictionary *dict = @{@"kWord":wordKey};
        [self pushControllerWithName:@"Dictionary" context:dict];

    }];
}

Журналы:

Смотреть расширение [3185: 2835671] результаты: (Привет)

Получение данных от другого контроллера интерфейса:

- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];

    NSDictionary *dict = (NSDictionary *)context;
    [_word setText:dict[@"kWord"]];

    NSLog(@"The Word is %@",[dict description]);

}

Журналы:

Watch Extension[3185:2835671] The Word is { kWord = "(\n Hello\n)"; }

Вот снимок экрана, который показывает мою проблему:

введите здесь описание изображения

Предполагается, что ( показывает слово Hello. Как я могу решить эту проблему?


person Mc.Lover    schedule 27.04.2016    source источник


Ответы (1)


Вы использовали stringWithFormat для форматирования массива в виде строки.

Это взяло ["Hello"] и правильно преобразовало его в буквальное "(\n Hello\n)"

Поскольку в этой строке есть новая строка, ее нельзя отобразить в одной строке. Количество строк в вашей раскадровке WKInterfaceLabel, скорее всего, равно 1, поэтому будет отображаться только первая строка, которая равна (.

Как это исправить?

  • Если вас интересует только первое слово, используйте results.firstObject и передайте это слово как строковое значение для вашего ключа kWord.

    NSDictionary *dict = @{@"kWord": results.firstObject};
    
  • В противном случае передайте весь массив в качестве значения, и пусть контроллер интерфейса назначения обработает массив результатов по мере необходимости.

    NSDictionary *dict = @{@"kWord": results};
    

Вы также можете изменить количество строк, чтобы отображался весь текст диктовки, чтобы обработать случай, когда текст не помещается на одной строке.

Другие варианты:

Если вы действительно намеревались отправить продиктованный текст в виде одной строки слов, вы можете использовать

NSString *wordKey = [results componentsJoinedByString:@" "]
person Community    schedule 28.04.2016