iOS json无法从iTunes API中检索数据

时间:2014-11-09 05:27:52

标签: ios objective-c json api itunes

我使用以下代码尝试从iTunes API获取trackName。它应该来自这个链接,例如: https://itunes.apple.com/search?term=EMINEM&entity=song&limit=3 它一直没有返回(标签是空白的,不是因为标签太小)

- (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 个答案:

答案 0 :(得分:0)

你也遇到了一些问题。

  1. 在构建encodedSearchString
  2. 时,您永远不会使用finalSearchString
  3. 您的示例网址会调用https://itunes.apple.com/ 搜索,而代码中的网址为https://itunes.apple.com/ 查找。将其更改为搜索会返回预期结果。
  4. 修正:

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