Я очень новичок в объектах c и OpenEars, поэтому, пожалуйста, простите меня, если у меня есть грязный код, и если я потерянный в очень простой проблеме.Открытый текст ушей для речи (голос) не работает при получении строки из другого класса/контроллера (IOS, Objective c)
Во всяком случае, у меня есть два контроллера в этом приложении. Первый из них - это ViewController по умолчанию, а второй - новый, который я создал с помощью функции ReplyManagerController.
Код в ViewController в основном использует ту, что находится в учебнике, с некоторыми (возможно, некоторыми) изменениями.
EDIT:
приложение должно быть основным приложением, в котором пользователь говорит что-то и приложение ответы.
Но первоначальная проблема заключалась в том, что я не мог заставить строку отображаться или работать с TTS, когда мой ViewController получил строку из другого класса/контроллера.
В ответе на моем примере упоминается, что это, вероятно, потому, что мой другой класс вызывал мой ViewController без инициализации self.fliteController.
Как инициализировать ViewController с инициализацией self.fliteController?
ViewController.m
- (void) pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis recognitionScore:(NSString *)recognitionScore utteranceID:(NSString *)utteranceID {
NSString *strResult = hypothesis; //speech to text to string
ReplyManager* replyObject = [[ReplyManager alloc] init];
[replyObject speechResult:(NSString*)strResult viewController:self];
}
- (void) getReply:(NSString*)replyStr{
[self.fliteController say:replyStr withVoice:self.slt];
[self updateText:replyStr];
}
- (IBAction)updateText:(NSString*)replyStr{
labelOne.text = replyStr;
labelOne.adjustsFontSizeToFitWidth = YES;
labelOne.minimumFontSize = 0;
}
Любая помощь будет здорово! Благодаря!
ReplyManager.m
- (void) speechResult:(NSString*)strResult {
NSString *replystr;
NSString *greetings = @"Hi!";
NSString *sorry = @"Sorry I didn't catch that?";
ViewController* getReply = [[ViewController alloc] init];
if ([strResult isEqualToString:@"HELLO"])
{
replystr = greetings;
[getReply getReply:(NSString*)replystr];
}
else
{
replystr = sorry;
[getReply getReply:(NSString*)replystr];
}
}
EDIT 2:
viewDidLoad Метод
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.fliteController = [[OEFliteController alloc] init];
self.slt = [[Slt alloc] init];
self.openEarsEventsObserver = [[OEEventsObserver alloc] init];
[self.openEarsEventsObserver setDelegate:self];
}
Да Я загружаю fliteController в - (void) viewDidLoad. – user2438817
И я получаю нуль в первом NSLog и получаю что-то в следующем – user2438817
Ну, вот и все. Проблема заключалась в том, что вы выделяете/init'd 'ViewController', но' - (void) viewDidLoad' никогда не вызывался для инициализации 'fliteController'. Добавление '[getReply.view layoutIfNeeded];' (или просто ссылка на 'view') вызвало запуск' viewDidLoad'. –