NSURLConnection возвращает значение Null по некоторым параметрам

Это мой URL. Мне нужно получить данные с этого URL... он вернет значение для английских слов... но если я дам такой параметр, как "Para Qué Volviste".. то он вернет ноль... Пожалуйста, помогите мне..

Мой код

 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);
}

3 ответа

Решение

Вы хотите, чтобы процент вашего параметра URL был экранирован, но будьте осторожны, чтобы вас не соблазнили stringByAddingPercentEscapesUsingEncoding, Это позаботится о пробелах (что является непосредственной проблемой), но если бы у вас были какие-то другие зарезервированные символы в нем, он потерпел бы неудачу (например, если бы ваш параметр имел & или же + персонажи в нем). Если вы хотите обрабатывать символы такого рода, вам действительно следует использовать 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: метод и обеспечить NO для startImmediately параметр.

Похоже на пробел в вашем 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];

Вы должны закодировать параметры запроса перед установлением соединения, как показано ниже,

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];
Другие вопросы по тегам