将 WatchKit 语音识别的文本发送到另一个界面控制器
Sending WatchKit Voice recognition's text to another interface controller
我在将口述文本发送到另一个界面控制器时遇到问题。
这是我的代码:
- (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];
}];
}
日志:
Watch Extension[3185:2835671] results: ( Hello )
从其他接口控制器获取数据:
- (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
。我该如何解决这个问题?
您使用 stringWithFormat
将 数组 格式化为字符串。
这需要 ["Hello"]
并将其正确转换为文字 "(\n Hello\n)"
因为那个字符串有一个换行符,所以不能单行显示。您的 Storyboard WKInterfaceLabel
行数可能设置为 1,因此它只会显示第一行,即 (
.
如何解决这个问题?
如果您只对第一个词感兴趣,请使用 results.firstObject
并将该单个词作为 kWord
键的字符串值传递。
NSDictionary *dict = @{@"kWord": results.firstObject};
否则,将整个数组作为值传递,并让目标接口控制器根据需要处理结果数组。
NSDictionary *dict = @{@"kWord": results};
您可能还想更改行数以显示整个听写文本,以处理文本无法放在一行中的情况。
其他选项:
如果您确实打算将口述文本作为单个单词字符串发送,您可以使用
NSString *wordKey = [results componentsJoinedByString:@" "]
我在将口述文本发送到另一个界面控制器时遇到问题。
这是我的代码:
- (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];
}];
}
日志:
Watch Extension[3185:2835671] results: ( Hello )
从其他接口控制器获取数据:
- (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
。我该如何解决这个问题?
您使用 stringWithFormat
将 数组 格式化为字符串。
这需要 ["Hello"]
并将其正确转换为文字 "(\n Hello\n)"
因为那个字符串有一个换行符,所以不能单行显示。您的 Storyboard WKInterfaceLabel
行数可能设置为 1,因此它只会显示第一行,即 (
.
如何解决这个问题?
如果您只对第一个词感兴趣,请使用
results.firstObject
并将该单个词作为kWord
键的字符串值传递。NSDictionary *dict = @{@"kWord": results.firstObject};
否则,将整个数组作为值传递,并让目标接口控制器根据需要处理结果数组。
NSDictionary *dict = @{@"kWord": results};
您可能还想更改行数以显示整个听写文本,以处理文本无法放在一行中的情况。
其他选项:
如果您确实打算将口述文本作为单个单词字符串发送,您可以使用
NSString *wordKey = [results componentsJoinedByString:@" "]