Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSURLConnection在某些参数中返回Null_Ios_Objective C_Json_Nsurlconnection - Fatal编程技术网

Ios NSURLConnection在某些参数中返回Null

Ios NSURLConnection在某些参数中返回Null,ios,objective-c,json,nsurlconnection,Ios,Objective C,Json,Nsurlconnection,这是。我需要从这个URL获取数据。它将返回英文单词的值。但是如果我给参数“Para QuéVolviste”。那么它将返回null。请帮助我 我的代码是 NSURLConnection * connectionGetISRC=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://ws.spotify.com/search/1/track.json?q=

这是。我需要从这个URL获取数据。它将返回英文单词的值。但是如果我给参数“Para QuéVolviste”。那么它将返回null。请帮助我

我的代码是

 NSURLConnection * connectionGetISRC=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://ws.spotify.com/search/1/track.json?q=Para Qué Volviste"]] delegate:self];
    [connectionGetISRC start];


-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    dataJson=[NSMutableData data];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"dat %@",data);
    [dataJson appendData:data];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"error %@",error.description);
    [hud hide:YES];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    id dict=[NSJSONSerialization JSONObjectWithData:dataJson options:kNilOptions error:nil];
    NSLog(@"dataJson %@",dataJson);
    NSLog(@"dicvt %@",dict);
}

在初始化连接之前,您应该对请求参数进行编码,如下所示

NSString* urlString = [NSString stringWithFormat:@"http://ws.spotify.com/search/1/track.json?q=%@",[@"Para Qué Volviste" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSURL* url = [NSURL URLWithString:urlString];

NSURLConnection * connectionGetISRC=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url] delegate:self];
[connectionGetISRC start];

在初始化连接之前,您应该对请求参数进行编码,如下所示

NSString* urlString = [NSString stringWithFormat:@"http://ws.spotify.com/search/1/track.json?q=%@",[@"Para Qué Volviste" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSURL* url = [NSURL URLWithString:urlString];

NSURLConnection * connectionGetISRC=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url] delegate:self];
[connectionGetISRC start];

看起来URL中的空格是个问题。请尝试此连接

 NSString *str=[NSString stringWithFormat:@"http://ws.spotify.com/search/1/track.json?q=Para Qué Volviste"];
str=[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURLConnection * connectionGetISRC=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]] delegate:self];
[connectionGetISRC start];

看起来URL中的空格是个问题。请尝试此连接

 NSString *str=[NSString stringWithFormat:@"http://ws.spotify.com/search/1/track.json?q=Para Qué Volviste"];
str=[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURLConnection * connectionGetISRC=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]] delegate:self];
[connectionGetISRC start];

您希望百分比转义URL的参数,但请注意不要被
stringby添加百分比转义usingencode
所诱惑。这可以很好地处理空格(这是一个直接的问题),但如果其中有一些其他保留字符,则会失败(例如,如果您的参数中有
&
+
字符)。如果要处理这些类型的字符,确实应该使用
CFURLCreateStringByAddingPercentEscapes

NSString* urlString = [NSString stringWithFormat:@"http://ws.spotify.com/search/1/track.json?q=%@", [self percentEscapeString:@"Para Qué Volviste"]];
NSURLConnection * connectionGetISRC=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString] delegate:self];
// [connectionGetISRC start];
其中,
percentEscapeString
调用
CFURLCreateStringByAddingPercentEscapes

- (NSString *)percentEscapeString:(NSString *)string
{ 
    return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                     (CFStringRef)string,
                                                                     NULL,
                                                                     (CFStringRef)@":/?@!$&'()*+,;=",
                                                                     kCFStringEncodingUTF8));
}
另外,
initWithRequest:delegate:
会自动启动连接,因此您不应该手动调用
start
方法。至于
start
说:

仅当您使用
initWithRequest:delegate:startImmediately:
方法创建连接并为
startImmediately
参数提供
NO
时,才需要调用此方法


您希望百分比转义URL的参数,但请注意不要被
stringby添加百分比转义usingencode
所诱惑。这可以很好地处理空格(这是一个直接的问题),但如果其中有一些其他保留字符,则会失败(例如,如果您的参数中有
&
+
字符)。如果要处理这些类型的字符,确实应该使用
CFURLCreateStringByAddingPercentEscapes

NSString* urlString = [NSString stringWithFormat:@"http://ws.spotify.com/search/1/track.json?q=%@", [self percentEscapeString:@"Para Qué Volviste"]];
NSURLConnection * connectionGetISRC=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString] delegate:self];
// [connectionGetISRC start];
其中,
percentEscapeString
调用
CFURLCreateStringByAddingPercentEscapes

- (NSString *)percentEscapeString:(NSString *)string
{ 
    return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                     (CFStringRef)string,
                                                                     NULL,
                                                                     (CFStringRef)@":/?@!$&'()*+,;=",
                                                                     kCFStringEncodingUTF8));
}
另外,
initWithRequest:delegate:
会自动启动连接,因此您不应该手动调用
start
方法。至于
start
说:

仅当您使用
initWithRequest:delegate:startImmediately:
方法创建连接并为
startImmediately
参数提供
NO
时,才需要调用此方法