2016-04-27 14 views
0

Ich habe ein Problem beim Senden von diktiertem Text an einen anderen Schnittstellencontroller.Den Text der WatchKit-Spracherkennung an einen anderen Schnittstellencontroller senden

Hier ist mein Code:

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

    }]; 
} 

Logs:

Uhr Verstellbereich [3185: 2.835.671] Ergebnisse: (Hallo)

Erste Daten aus anderen Schnittstellen-Controller:

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

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

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

} 

Logs:

beobachten Verstellbereich [3185: 2.835.671] Das Wort ist { kWord = "(\ n Hallo \ n)"; }

Hier ist ein Screenshot, der mein Problem zeigt:

enter image description here

Die ( soll Hello das Wort zeigen. Wie kann ich dieses Problem beheben?

Antwort

1

Sie haben stringWithFormat verwendet, um ein Array als Zeichenfolge zu formatieren. Diese

nahm ["Hello"] und korrekt konvertiert es in die wörtliche "(\n Hello\n)"

Da diese Zeichenfolge eine neue Zeile hat, kann es nicht in einer einzigen Zeile angezeigt werden. Ihr Storyboard WKInterfaceLabel Anzahl der Zeilen ist wahrscheinlich auf 1 gesetzt, so würde es nur die erste Zeile anzeigen, die ( ist.

Wie können Sie das beheben?

  • Wenn Sie daran interessiert sind nur in dem ersten Wort sind, verwenden Sie results.firstObject und passieren, dass einzelne Wort als String-Wert für Ihren kWord Schlüssel.

    NSDictionary *dict = @{@"kWord": results.firstObject}; 
    
  • Andernfalls passieren den gesamten Array als Wert, und hat die Ziel-Schnittstellencontroller die Anordnung der Ergebnisse nach Bedarf bearbeiten.

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

Sie wollen auch kann die Anzahl der Zeilen ändern, um die gesamte Diktat Text anzuzeigen, den Fall zu behandeln, wo der Text in einer einzigen Zeile nicht passen würde.

Weitere Optionen:

Wenn Sie tatsächlich soll den diktierten Text als eine einzige Folge von Wörtern senden, können Sie verwenden

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