2013-05-03 1 views
0

В одном из методов делегата представления таблицы я обращаюсь к некоторым строкам на основе некоторых условий , и я хочу говорить эти строки с помощью ESpeak Engine .. В журнале он задает все строки с соответствующими строками ... но озвучка двигатель только с последней строкой (то есть, это только написание последней строки.)ESpeak Engine в iOS синхронным образом

Как сделать по буквам всех строк ..

Вот мой код ..

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)celle forRowAtIndexPath:(NSIndexPath *)indexPath { 
     NSLog(@"Final Speak Child List:%@",[stringComponentsForArray objectAtIndex:1]); 

     [engine speak:[stringComponentsForArray objectAtIndex:1]]; 

} 
+0

Вы пытаетесь говорить все строки для каждого tableViewCell? Вероятно, вы захотите поместить этот вызов в метод didSelectRowForIndex, если вы пытаетесь говорить только с текущей ячейкой и меняете [engine говорить [stringComponentsForArray objectAtIndex: indexPath.row] ;. –

+0

Я не хочу говорить имя при выборе строки. Так что мы не можем добавить его в didSelectRow..На основании какого-то условия я хочу отфильтровать некоторые строки, и я хочу говорить только о том, что отфильтрованные строки продолжаются ... – Sandeep

+0

Is массив изменяется в другом месте, потому что вы вызываете [engine speak: [stringComponentsForArray objectAtIndex: 1] снова и снова. Не хотите ли изменить индекс? –

ответ

0

Если вы пытаетесь говорить все строки из массива, то вы можете добавить все строки к свойству NSString, а затем, когда UITableView завершит загрузку, вы можете начать говорить со всеми строками, написав эту длинную добавленную NSString. В противном случае поместите это в didSelectRowForIndex и вызовите этот метод там, относящийся к соответствующему indexPath.row для массива.

[engine speak [stringComponentsForArray objectAtIndex:indexPath.row]; 
0

От беглый взгляд на заголовок, озвучки не очереди запросов, поэтому последний один отменяет ранее.

Вы можете объединить текст в большую строку и сделать это таким образом, но это не сработает, если вы хотите изменить динамик или время управления.

Что вы должны сделать, это сделать небольшую очередь и затем реализовать метод делегата

- (void)speechEngineDidFinishSpeaking:(ESpeakEngine*)engine successfully:(BOOL)flag; 

Поскольку каждый текст завершается, вы можете добавить следующий.

Надеюсь, что это поможет