2012-09-18 105 views
1

请看一下这个,告诉我为什么我的NSURL * urlStringURL总是一个“无效的CRStringRef”不知道怎么回事。谢谢!我的NSURL语句有什么问题?

编辑:下面的代码不起作用,因为它是一个GET。无法编码收据以进行GET工作。好的代码遵循错误的代码。

- (void) sendReceipt { 

NSObject *rData = [[NSUserDefaults standardUserDefaults] objectForKey:@"purchaseReceipt"]; 

NSNumber *custData = [[NSUserDefaults standardUserDefaults] objectForKey:@"phoneNumber"]; 

NSString *urlString = [[NSString alloc] initWithString:@"https://www.privusmobile.info/Apple-???/?TYPE=GET"];  

NSLog(@"Transaction to send %@,%@" , rData,custData); 


urlString = [urlString stringByAppendingFormat:@"&Cust=IP%@", custData];   
urlString = [urlString stringByAppendingFormat:@"&Receipt=%@", rData]; 

NSURL *urlStringURL =[NSURL URLWithString:[NSString stringWithFormat:@"%@",urlString]]; 

NSMutableURLRequest *urlRequest =[NSMutableURLRequest requestWithURL:urlStringURL]; 
NSString *params = [[NSString alloc]initWithString:urlString]; 
urlData = [[NSMutableData alloc]init]; 
[urlRequest setHTTPMethod:@"GET"]; 
[urlRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]]; 


NSURLConnection *connection = [NSURLConnection connectionWithRequest:urlRequest delegate:self]; 
connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self]; 


NSLog(@"started!"); 

} 

END BAD CODE OF

好代码如下:

- (void) sendReceipt { 

NSObject *rData = [[NSUserDefaults standardUserDefaults] objectForKey:@"purchaseReceipt"]; 

NSNumber *custData = [[NSUserDefaults standardUserDefaults] objectForKey:@"phoneNumber"]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"https://www.privusmobile.info/Apple??????/default.aspx?"]]; 

[request setHTTPMethod:@"POST"]; 
[request setValue:@"text/xml" forHTTPHeaderField:@"Content-type"]; 

NSString *xmlString = [NSString stringWithFormat:@"<data><item>IP%@ </item><item>%@</item></data>",custData,rData]; 


NSLog(@"XMLSTRING %@",xmlString); 

[request setValue:[NSString stringWithFormat:@"%d",[xmlString length]] forHTTPHeaderField:@"Content-length"]; 

[request setHTTPBody:[xmlString dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 

NSLog(@"started! %@",connection);   

} 


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 

NSString * strResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
NSLog(@"SERVER DATA %@", strResponse); 


} 

线索是编码的提示。谢谢。

+1

感谢为我提供贵公司的网络API的秘密网址... – 2012-09-18 18:26:04

+2

顺便说一下所有的'initWithString的:','stringWithString:','stringWithFormat:@ “%@”'等。电话是完全多余的**。你收回完全相同的字符串,并浪费一个(两个,三...)额外的函数调用... – 2012-09-18 18:29:48

+0

我只是把你的代码,跑了。它工作正常,我没有得到任何错误。你使用哪个iOS SDK? – Ravi

回答

0

尝试编码url字符串。最有可能在rData有空格,但我只是猜测。试试这个:

NSObject *rData = [[NSUserDefaults standardUserDefaults] objectForKey:@"purchaseReceipt"]; 

NSNumber *custData = [[NSUserDefaults standardUserDefaults] objectForKey:@"phoneNumber"]; 

NSString *urlString = [[NSString alloc] initWithString:@"https://www.privusmobile.info/Apple-App/?TYPE=GET"]; 

urlString = [urlString stringByAppendingFormat:@"&Cust=IP%@", custData];   
urlString = [urlString stringByAppendingFormat:@"&Receipt=%@", rData]; 

NSString* escapedUrlString =[urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 

NSURL *urlStringURL =[NSURL URLWithString:escapedUrlString]; 
+0

谢谢大家。我正在通过这些建议。一旦测试,将验证答案。 – PrivusGuru