2013-05-03 4 views
0

테이블 뷰 대리자 메서드 중 하나에서 일부 조건에 따라 일부 문자열에 액세스합니다. 그리고 ESpeak 엔진을 사용하여 해당 문자열을 말하고 싶습니다. 로그에서 일치하는 모든 문자열을 제공합니다 ...하지만 eSpeak를 엔진은 마지막 문자열을 취하고있다 (즉, 그것은 단지 마지막 문자열을 철자한다.)동기식으로 iOS에서 ESpeak 엔진

모든 문자열 철자를 만드는 방법

.. 여기

내 코드입니다 ..

- (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에 대해 모든 문자열을 말하려고합니까? 현재 셀만 말하고 [engine speak [stringComponentsForArray objectAtIndex : indexPath.row];로 변경하려는 경우 해당 호출을 didSelectRowForIndex 메서드에 배치하려고합니다. –

+0

나는 행을 선택하는 동안 이름을 말하고 싶지 않습니다. 그래서 우리는 didSelectRow에 그것을 추가 할 수 없습니다. 일부 조건을 기반으로 일부 문자열을 필터링하고, 필터링 된 문자열을 연속적으로 말하고 싶습니다 ... – Sandeep

+0

Is [engine speak : [stringComponentsForArray objectAtIndex : 1]을 계속해서 호출하기 때문에 배열이 다른 곳에서 변경됩니다. 색인을 변경하고 싶지 않습니까? –

답변

0

배열에서 문자열을 다음 모든 문자열을 NSString 속성에 추가 할 수 있습니다 및 다음 UITableView로드가 완료되면 NSString 긴 추가 말할 모든 문자열을 말하기 시작할 수 있습니다. 그렇지 않으면 didSelectRowForIndex에 배치하고 해당 배열에 대한 적절한 indexPath.row와 관련하여 해당 메서드를 호출합니다.

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

머리글을 간략히 살펴보면 ESpeak는 요청을 큐에 넣지 않아서 마지막 요청이 이전 요청보다 우선 적용됩니다.

큰 문자열로 텍스트를 결합하여 그렇게 할 수는 있지만 스피커 또는 제어 타이밍을 변경하려는 경우에는 작동하지 않습니다. 당신이해야 할 것들

은 각 텍스트가 완료, 당신은 다음 중 하나를 추가 할 수 있습니다 약간의 큐를 확인한 다음 대리자 메서드를

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

을 구현합니다.

희망이 있습니다.

관련 문제