2014-11-09 115 views
0

我正在使用以下代码尝试从iTunes API获取trackName。它应该从这个链接,例如: https://itunes.apple.com/search?term=EMINEM&entity=song&limit=3 它使返回什么(标签是空白,这是不是因为标签太小)iOS json无法从iTunes API获取数据

- (void)pressSearchKey { 
    NSInteger numberOfResults = 3; 
    NSString *searchString = self.keyboard.textField.text; 

    NSString *encodedSearchString = [searchString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    NSString *finalSearchString = [NSString stringWithFormat:@"https://itunes.apple.com/lookup?term=%@&entity=song&limit=%ld",searchString,numberOfResults]; 

    NSURL *searchURL = [NSURL URLWithString:finalSearchString]; 
    dispatch_queue_t iTunesQueryQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

    dispatch_async(iTunesQueryQueue, ^{ 
     NSError *error = nil; 
     NSData *data = [[NSData alloc] initWithContentsOfURL:searchURL options:NSDataReadingUncached error:&error]; 

     if (data && !error) { 
      NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 

      NSArray *array = [JSON objectForKey:@"results"]; 
      NSArray *arrayTracks; 
      for (NSDictionary *bpDictionary in array) { 
       arrayTracks = [bpDictionary objectForKey:@"trackName"]; 
      } 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       self.keyboard.firstLabel.text = [arrayTracks objectAtIndex:1]; 
      }); 
     } 
    }); 
} 
+1

这是什么输出,当您登录名为'JSON'字典? – rebello95 2014-11-09 05:35:18

+0

@ rebello95我无法登录,因为这是一个扩展名(自定义键盘),但我可以为它设置一个标签的文本。当我做'self.keyboard.firstLabel.text = [JSON objectForKey:@“结果”];'它甚至没有改变文字。并且这个'self.keyboard.firstLabel.text = [NSString stringWithFormat:@“%@”,JSON];'只是做了标签空白 – abc123abc 2014-11-09 05:41:07

+0

尝试在该行上面放置一个断点并检查元素以查看其内容。我假设反序列化失败 – rebello95 2014-11-09 05:42:49

回答

0

你有一对夫妇的问题,在这一个了。

  1. 你永远利用建筑物finalSearchString
  2. 你的榜样URL调用https://itunes.apple.com/搜索,而在你的代码的URL是https://itunes.apple.com/查找encodedSearchString。将其更改为搜索返回预期结果。

修正:

NSInteger numberOfResults = 3; 
NSString *searchString = @"EMINEM"; 

NSString *encodedSearchString = [searchString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString *finalSearchString = [NSString stringWithFormat:@"https://itunes.apple.com/search?term=%@&entity=song&limit=%ld",encodedSearchString,numberOfResults]; 

NSURL *searchURL = [NSURL URLWithString:finalSearchString]; 
dispatch_queue_t iTunesQueryQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

dispatch_async(iTunesQueryQueue, ^{ 
    NSError *error = nil; 
    NSData *data = [[NSData alloc] initWithContentsOfURL:searchURL options:NSDataReadingUncached error:&error]; 

    if (data && !error) { 
     NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 

     NSArray *array = [JSON objectForKey:@"results"]; 
     NSArray *arrayTracks; 
     for (NSDictionary *bpDictionary in array) { 
      arrayTracks = [bpDictionary objectForKey:@"trackName"]; 
     } 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      NSLog(@"%@", [arrayTracks objectAtIndex:1]); 
     }); 
    } 
});