2016-04-27 2 views
0

別のインターフェイスコントローラに指示されたテキストを送信する際に問題が発生しています。ここで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]); 

} 

ログ:

時計拡張【3185:2835671] Wordは{ Kワード= "(\ nはハローの\ n)" です。ここで }

は私の問題を示しているスクリーンショットです:

enter image description here

(ワードHelloを表示するようになっています。この問題を解決するにはどうすればよいですか?

答えて

1

stringWithFormatを使用して、の配列を文字列としてフォーマットしました。

これは["Hello"]を取り、正確にその文字列が改行を持っている、それは、単一の行に表示することはできませんのでリテラル"(\n Hello\n)"

にそれを変換します。あなたのストーリーボードWKInterfaceLabelの行数は1に設定されている可能性が高いため、最初の行は(となります。

これをどのように修正できますか?

  • あなたが最初の単語で唯一興味があるなら、results.firstObjectを使用して、あなたのkWordキーの文字列値として、その単一の単語を渡します。

    NSDictionary *dict = @{@"kWord": results.firstObject}; 
    
  • そうでない場合、値として全体配列を渡し、必要に応じて、宛先インタフェースコントローラは結果の配列を処理しています。

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

また、テキスト1行に収まらない場合に対処するために、全体のディクテーションテキストを表示する行数を変更することもできます。

その他のオプション:

あなたが実際に言葉の1つの文字列として口述テキストを送信することを意図している場合、あなたは

NSString *wordKey = [results componentsJoinedByString:@" "] 
を使用することができます