将WatchKit语音识别文本发送到另一个接口控制器

时间:2016-04-27 22:28:28

标签: objective-c watchkit apple-watch watch-os-2

我在向另一个接口控制器发送口述文本时遇到问题。

这是我的代码:

- (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]);

}

日志:

  

观看扩展[3185:2835671]这个词是{           kWord ="(\ n Hello \ n)&#34 ;;       }

以下是显示我的问题的屏幕截图:

enter image description here

(应该显示单词Hello。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您使用stringWithFormat数组格式化为字符串。

这需要["Hello"]并将其正确转换为文字"(\n Hello\n)"

因为该字符串有换行符,所以它不能显示在一行上。您的故事板WKInterfaceLabel行数可能设置为1,因此它只会显示第一行,即(

你如何解决这个问题?

  • 如果您只对第一个单词感兴趣,请使用results.firstObject并将该单个单词作为kWord键的字符串值传递。

    NSDictionary *dict = @{@"kWord": results.firstObject};
    
  • 否则,将整个数组作为值传递,并让目标接口控制器根据需要处理结果数组。

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

您可能还想更改显示整个听写文本的行数,以处理文本不适合单行的情况。

其他选项:

如果您确实打算将口述文本作为单个字符串发送,则可以使用

NSString *wordKey = [results componentsJoinedByString:@" "]