我在向另一个接口控制器发送口述文本时遇到问题。
这是我的代码:
- (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 ;; }
以下是显示我的问题的屏幕截图:
(
应该显示单词Hello
。我该如何解决这个问题?
答案 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:@" "]