2013-03-12 77 views
0

我試圖使用googletts轉換並似乎遇到了麻煩。我認爲我在結構上做了正確的課。但我不認爲NSURLConnection正在返回任何有用的數據。有人可以幫助我檢查它的工作,如果不是爲什麼?NSURLConnection的似乎並不奏效,

在connectiondidfinishloading部分我檢查下載長度 的NSLog(@「hmmmm%錄」,(無符號長)downloadedData長度]) 它返回0。這就是爲什麼我認爲它不工作。

的目標是讓應用程序說什麼下載

謝謝!

我只是在我的視圖控制器一個按鈕,啓動一切

#import <UIKit/UIKit.h> 
#import <CoreLocation/CoreLocation.h> 
#import "RJGoogleTTS.h" 


@interface ViewController : UIViewController <CLLocationManagerDelegate> 

@property (weak, nonatomic) IBOutlet UILabel *userLabel; 
@property (strong, nonatomic) CLLocationManager *locationManager; 
@property (strong, nonatomic) CLGeocoder *geoCoder; 

@property (strong, nonatomic) RJGoogleTTS *googleTTS; 

- (IBAction)geoCodeLocation:(id)sender; 

- (IBAction)rjGoogleButton:(id)sender; 
@end 

這裏是實現文件

- (IBAction)rjGoogleButton:(id)sender { 

    googleTTS = [[RJGoogleTTS alloc]init]; 

    [googleTTS convertTextToSpeech:@"How are you today user?"]; 

} 

RJGoogleTTS.h

#import <Foundation/Foundation.h> 

@protocol RJGoogleTTSDelegate <NSObject> 

@required 
- (void)receivedAudio:(NSMutableData *)data; 
- (void)sentAudioRequest; 

@end 

@interface RJGoogleTTS : NSObject { 
    id <RJGoogleTTSDelegate> delegate; 
    NSMutableData *downloadedData; 
} 

@property (nonatomic, retain) id <RJGoogleTTSDelegate> delegate; 
@property (nonatomic, retain) NSMutableData *downloadedData; 

- (void)convertTextToSpeech:(NSString *)searchString; 

@end 

.M

#import "RJGoogleTTS.h" 
#import <AVFoundation/AVFoundation.h> 

@implementation RJGoogleTTS 
@synthesize delegate, downloadedData; 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     // Initialization code here. 
    } 

    return self; 
} 

- (void)convertTextToSpeech:(NSString *)searchString { 
    NSString *search = [NSString stringWithFormat:@"http://translate.google.com/translate_tts?q=%@", searchString]; 
    search = [search stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; 
    NSLog(@"Search: %@", search); 
    self.downloadedData = [[NSMutableData alloc] initWithLength:0]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:search]]; 
    [request setValue:@"Mozilla/5.0" forHTTPHeaderField:@"User-Agent"]; 
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 
    [delegate sentAudioRequest]; 




} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    NSLog(@"did you receive response user"); 
    [self.downloadedData setLength:0]; 

} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    NSLog(@"did you receive data user"); 
    [self.downloadedData appendData:data]; 

// AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]initWithData:downloadedData error:nil]; 
// [audioPlayer play]; 

} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSLog(@"Failure"); 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 

    NSLog(@"it worked user!!!"); 
    [delegate receivedAudio:self.downloadedData]; 
    NSLog(@"hmmmm %d", [self.downloadedData length]); 



// NSString *txt = [[NSString alloc] initWithData:downloadedData encoding: NSASCIIStringEncoding]; 
// NSLog(@"%@hello",txt); 

} 

@end 
+0

是否所有工作日誌? – rdelmar 2013-03-12 02:07:46

回答

1

沒有什麼不對您NSURLConnection的方法。您的搜索字符串是錯誤的。它應該是:

NSString *search = [NSString stringWithFormat:@"http://translate.google.com/translate_tts?tl=en&q=%@",searchString]; 
+0

天才....所以現在看來​​我正在獲取數據。 2013-03-12 09:44:18.332 LocalWeatherV3 [1748:c07] hmmmm 7632 ... 7632是字節,如果數據在零之前。你會不會知道我究竟如何看待內容?或者因爲這是音頻,沒有什麼可以看到的? – solarissf 2013-03-12 13:49:00

+0

我在最後加入了DidFinishLoading部分,AVAudioPlayer * audioPlayer = [[AVAudioPlayer alloc] initWithData:downloadedData error:nil]; [audioPlayer play]; .....但我聽不到任何聲音,有什麼想法? – solarissf 2013-03-12 14:02:41

+0

@solarissf,對不起,我不知道爲什麼這是行不通的。 – rdelmar 2013-03-12 15:24:14

2

請記住,這是異步發生的。在您致電NSURLConnection後,您將downloadedData的尺寸設置爲0。

移動:

self.downloadedData = [[NSMutableData alloc] initWithLength:0];

您的來電NSURLConnection之前。

+0

我改變了順序,請看上面。你是這個意思嗎? – solarissf 2013-03-12 00:54:33

+0

我也得到在警告[[NSURLConnection的頁頭] initWithRequest:請求委託:自我]; ..表達UNUSED – solarissf 2013-03-12 00:55:06

+0

我寧願要麼使用性能或IVAR。你之前使用過這個屬性,所以我使用'self.downloadedData'。該NSURLConnection的調用返回一個NSURLConnection的對象,但你沒有設置一個,像'NSURLConnection的*連接= [[NSURLConnection的頁頭] initWithRequest:要求委託:自我]' – 2013-03-12 01:04:32

0

你沒有啓動的URLConnection。更改[[NSURLConnection alloc] initWithRequest:request delegate:self];這樣[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

+0

我把立即開始..什麼都沒有改變 – solarissf 2013-03-12 01:13:33

+0

這是不正確 - 使用initWithRequest:代表:相當於使用initWithRequest:委託:startImmediately:和傳球是最後一個參數。 – rdelmar 2013-03-12 02:05:05